// Formular Checks für Energieausweis

// Ziele für die Formulare
directions = new Array("energieausweis.php", "simulation_energieausweis.php","02_energieausweis.php", "03_energieausweis.php", "04_energieausweis.php", "info_beratung_energieausweis.php", "info_bedarfsorientierter_energieausweis.php", "info_verbrauchsorientierter_energieausweis.php", "simulation_landingpage.php", "kontaktformular_energieausweis.php");

// Form_IDs: 01=auswahlseite, 02=dateneingabe, 03=kontoinformationen, 04=kontaktformular, 05=infoseiten, 06=aufruf des kontaktformulars
formIDs = new Array("ahs_ea_01","ahs_ea_02","ahs_ea_03","ahs_ea_04","ahs_ea_05","ahs_ea_06");

// Fehlermeldungen für die Formulare
messages = new Array();

// Stack für Fehlermeldungen
errorStack = new Array();

// Stack für Fehlerhighlights
errorHighlights = new Array();

errorHighlights["ST01"] = new Array('selection01','selection02','selection03');

errorHighlights["PD01"] = new Array(); // keine Felder gehighlightet, nur Text
errorHighlights["PD02"] = new Array('email','telefon');
errorHighlights["PD03"] = new Array('vorname');
errorHighlights["PD04"] = new Array('name');
errorHighlights["PD05"] = new Array('strasse','ort');
errorHighlights["PD06"] = new Array('anlass');
errorHighlights["PD07"] = new Array('anzahl');
errorHighlights["PD08"] = new Array('hausart');
errorHighlights["PD09"] = new Array('Wohnungen');
errorHighlights["PD10"] = new Array('gewerblich');
errorHighlights["PD11"] = new Array('email');
errorHighlights["PD12"] = new Array('ort');
errorHighlights["PD13"] = new Array('email');
errorHighlights["PD14"] = new Array('anzahl');
errorHighlights["PD15"] = new Array('hausart');
errorHighlights["PD16"] = new Array('Wohnungen');

errorHighlights["ZD01"] = new Array(); // keine Felder gehighlightet, nur Text
errorHighlights["ZD02"] = new Array('kontonummer');
errorHighlights["ZD03"] = new Array('bankleitzahl');
errorHighlights["ZD04"] = new Array('kontoinhaber'); 
errorHighlights["ZD05"] = new Array();
errorHighlights["ZD06"] = new Array();

errorHighlights["KF01"] = new Array(); // keine Felder gehighlightet, nur Text
errorHighlights["KF02"] = new Array('name');
errorHighlights["KF03"] = new Array('plz');
errorHighlights["KF04"] = new Array('email');
errorHighlights["KF05"] = new Array('plz');
errorHighlights["KF06"] = new Array('email');

messages["ahs_ea_01"] = new Array();
messages["ahs_ea_01"]["ST01"] = "W&auml;hlen Sie bitte aus, ob Sie eine Energieberatung oder einen Energieausweis f&uuml;r Ihr Wohnhaus m&ouml;chten.";

messages["ahs_ea_02"] = new Array();
messages["ahs_ea_02"]["PD00"] = "Bei einer gewerblichen Nutzung von mehr als 10% oder mehr als 10 Wohnungen ist eine Online-Bestellung leider nicht m&ouml;glich. Gern k&ouml;nnen Sie sich jedoch <a href=\"javascript:document.forms['ahs_ea_02'].action='kontaktformular_energieausweis.php';document.forms['ahs_ea_02'].submit();\" style='color:#990000;'>direkt mit uns in Verbindung setzen</a>, um das individuelle Vorgehen in diesem Fall zu besprechen.";
messages["ahs_ea_02"]["PD01"] = "Bitte f&uuml;llen Sie die gekennzeichneten Felder aus.";
messages["ahs_ea_02"]["PD02"] = "Bitte geben Sie Ihre Telefonnummer oder E-Mail-Adresse an, damit wir Sie kontaktieren k&ouml;nnen.";
messages["ahs_ea_02"]["PD03"] = "Bitte geben Sie Ihren Vornamen an.";
messages["ahs_ea_02"]["PD04"] = "Geben Sie bitte Ihren Nachnamen an.";
messages["ahs_ea_02"]["PD05"] = "Geben Sie bitte Ihre Adressdaten vollständig an.";
messages["ahs_ea_02"]["PD06"] = "Zu welchem Zweck ben&ouml;tigen Sie den Energieausweis?";
messages["ahs_ea_02"]["PD07"] = "Wie viele Ausweise ben&ouml;tigen Sie?";
messages["ahs_ea_02"]["PD08"] = "Geben Sie bitte die Art des Hauses an.";
messages["ahs_ea_02"]["PD09"] = "Wie viele Wohnungen hat das Haus?";
messages["ahs_ea_02"]["PD10"] = "Bitte geben Sie an, zu wieviel Prozent das Haus gewerblich genutzt wird.";
messages["ahs_ea_02"]["PD11"] = "Bitte geben Sie Ihre E-Mail-Adresse an.";
messages["ahs_ea_02"]["PD12"] = "Bitte kontrollieren Sie die angegebene Postleitzahl.";
messages["ahs_ea_02"]["PD13"] = "Ihre E-Mail-Adresse ist syntaktisch falsch!";
messages["ahs_ea_02"]["PD14"] = "Die Anzahl der gewünschten Ausweise mu&szlig; mindestens eins betragen.";
messages["ahs_ea_02"]["PD15"] = "Für mehr als 3 Wohnungen müssen Sie bei Art des Hauses 'Mehrfamilienhaus' auswählen.";
messages["ahs_ea_02"]["PD16"] = "Die Anzahl der Wohnungen mu&szlig; mindestens eins betragen.";

messages["ahs_ea_03"] = new Array();
messages["ahs_ea_03"]["ZD01"] = "Bitte f&uuml;llen Sie die gekennzeichneten Felder aus.";
messages["ahs_ea_03"]["ZD02"] = "Geben Sie bitte Ihre Konto-Nummer an.";
messages["ahs_ea_03"]["ZD03"] = "Geben Sie bitte Ihre Bankleitzahl an.";
messages["ahs_ea_03"]["ZD04"] = "Geben Sie bitte den Konto-Inhaber an.";
messages["ahs_ea_03"]["ZD05"] = "Bitte best&auml;tigen Sie die Einzugsermächtigung, sowie dass Sie die Widerrufsbelehrung und die Kundeninformation gelesen haben.";
messages["ahs_ea_03"]["ZD06"] = "Bitte best&auml;tigen Sie die Einzugsermächtigung, sowie dass Sie die Widerrufsbelehrung und die Kundeninformation gelesen haben und dass Ihnen bekannt ist, dass es sich nicht um einen Ausweis des BAFA handelt.";

messages["ahs_ea_04"] = new Array();
messages["ahs_ea_04"]["KF01"] = "Bitte f&uuml;llen Sie die gekennzeichneten Felder aus.";
messages["ahs_ea_04"]["KF02"] = "Bitte geben Sie Ihren Namen an.";
messages["ahs_ea_04"]["KF03"] = "Bitte geben Sie Ihre Postleitzahl an.";
messages["ahs_ea_04"]["KF04"] = "Bitte geben Sie Ihre E-Mail-Adresse an.";
messages["ahs_ea_04"]["KF05"] = "Bitte kontrollieren Sie die angegebene Postleitzahl.";
messages["ahs_ea_04"]["KF06"] = "Ihre E-Mail-Adresse ist syntaktisch falsch!";


function ea_formCheck(_form, _adhocCheck)
{
	theForm = document.getElementById(_form);
	errorStack = new Array();

	form_ok = true;

	switch (_form)
	{
	
	// Formular Auswahlseite, ahs_ea_01 ######################################################################################
	case formIDs[0]:
	
		// formCheck für Auswahlseite	

		// ST01: nichts ausgewählt
		if (!theForm.elements[0].checked && !theForm.elements[1].checked && !theForm.elements[2].checked)
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "ST01";
			
			form_ok = false;
			}

		// Absendeaufarbeitung

		if (form_ok  && !_adhocCheck)
			{
			
			if (theForm.elements[0].checked)
				{
				openToolWindow(directions[1]);
				}

			else if (theForm.elements[1].checked)
				{
				theForm.action = directions[6];
				theForm.elements["mode"].value = "energieausweis";
				theForm.submit();
				}
			
			else if (theForm.elements[2].checked)
				{

				theForm.action = directions[5];
				theForm.elements["mode"].value = "energieberatung";
				theForm.submit();
				}
			}

		else 
			{
			showErrors(_form);
			}

		break;

	// Formular Dateneingabe, ahs_ea_02 ######################################################################################
	case formIDs[1]:
		// formCheck für die Dateneingabe	
		
		// PD01: ermittlung von PD01 geschieht in showErrors() (mehrere Felder nicht ausgefüllt)

		// PD02: GELÖSCHT: telefon und email nicht ausgefüllt

		// PD03: vorname
		
		if (theForm.elements["vorname"].value == "")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD03";
			
			form_ok = false;
			}
		else 
			{
			lowLight("vorname");
			}

		// PD04: nachname
		
		if (theForm.elements["name"].value == "")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD04";
			
			form_ok = false;
			}
		else 
			{
			lowLight("name");
			}

		// PD05: strasse/plz/ort
		
		if (theForm.elements["strasse"].value == "" || (theForm.elements["plz"].value == "" && theForm.elements["ort"].value == "" ))
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD05";
			
			form_ok = false;
			}
		else 
			{
			lowLight("strasse");
			lowLight("ort");
			}
		

		// PD06: anlass
		
		if (theForm.elements["anlass"].selectedIndex == 0)
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD06";
			
			form_ok = false;
			}
		else 
			{
			lowLight("anlass");
			}

		// PD07: anzahl ausweise
		if (theForm.elements["mode"].value == "energieausweis")
			{
			if (theForm.elements["anzahl"].value == "")
				{
				// fehler anzeigen
				errorStack[errorStack.length] = "PD07";
				
				form_ok = false;
				}
			else 
				{
				lowLight("anzahl");
				}
			}
		
		// PD08: keine hausart angegeben
		
		if (theForm.elements["hausart"].selectedIndex == 0)
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD08";
			
			form_ok = false;
			}
		else 
			{
			lowLight("hausart");
			}

		// PD09: keine Wohnungen angegeben
		
		if (theForm.elements["Wohnungen"].value == "")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD09";
			
			form_ok = false;
			}
		else 
			{
			lowLight("Wohnungen");
			}
		
		// PD10: keine gewerbliche Nutzung angegeben
		
		if (theForm.elements["gewerblich"].selectedIndex == 0)
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD10";
			
			form_ok = false;
			}
		else 
			{
			lowLight("gewerblich");
			}

		// PD11: keine E-Mail-Adresse angegeben.

		if (theForm.elements["email"].value == "")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD11";
			
			form_ok = false;
			}
		else 
			{
			lowLight("email");
			}

		// PD12: PLZ check
		if (theForm.elements["plz"].value != "" && !(theForm.elements["plz"].value > 1000 && theForm.elements["plz"].value <= 99998))
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD12";
			
			form_ok = false;
			} 
		else if (theForm.elements["plz"].value != "")
			{
			lowLight("ort");
			}
		
		// PD13 email-check 

		if (!checkForm(_form))
		{
			form_ok = false;
		}
		
		// PD14: anzahl ausweise
		
		if (theForm.elements["mode"].value == "energieausweis")
			{
			if (theForm.elements["anzahl"].value < 1 && theForm.elements["anzahl"].value != "")
				{
				// fehler anzeigen
				errorStack[errorStack.length] = "PD14";
				
				form_ok = false;
				}
			else 
				{
				lowLight("anzahl");
				}
			}

		// PD15: hausart / anzahl wohnunge check
		
		if (theForm.elements["Wohnungen"].value > 2 && theForm.elements["hausart"].selectedIndex != 6)
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD15";
			
			form_ok = false;
			} 
		else 
			{
			lowLight("hausart");
			}
		
		// PD16: anzahl Wohnungen
		
		if (theForm.elements["Wohnungen"].value < 1 && theForm.elements["Wohnungen"].value != "")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "PD16";
			
			form_ok = false;
			}
		else 
			{
			lowLight("Wohnungen");
			}


		// Absendeaufarbeitung

		if (form_ok)
			{
			theForm.action = directions[3];
			theForm.submit();
			}
		
		else 
			{
			showErrors(_form);
			}

		break;

	case formIDs[2]:
	
		// formCheck für Zahlungsdaten	

		// ZD01: mehrere nicht ausgefüllt wird dynamisch in showErrors() ermittelt

		// ZD02: KNR
		if (theForm.elements["kontonummer"].value =="")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "ZD02";
			
			form_ok = false;
			}
		else 
			{
			lowLight("kontonummer");
			}
		
		// ZD03: BLZ 
		if (theForm.elements["bankleitzahl"].value =="")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "ZD03";
			
			form_ok = false;
			}
		else 
			{
			lowLight("bankleitzahl");
			}

		// ZD04: BLZ 
		if (theForm.elements["kontoinhaber"].value =="")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "ZD04";
			
			form_ok = false;
			}
		else 
			{
			lowLight("kontoinhaber");
			}

		if (theForm.elements["mode"].value == "energieausweis")
			{
			// ZD06: kundeninfo und widerrufsbelehrung und bafa
			if (!theForm.elements["widerruf"].checked || !theForm.elements["kundeninfo"].checked || !theForm.elements["einzug"].checked)
				{
				// fehler anzeigen
				errorStack[errorStack.length] = "ZD05";
				
				form_ok = false;
				}
			}

		if (theForm.elements["mode"].value == "energieberatung")
			{
			// ZD06: kundeninfo und widerrufsbelehrung und bafa
			if (!theForm.elements["widerruf"].checked || !theForm.elements["kundeninfo"].checked || !theForm.elements["bafa"].checked || !theForm.elements["einzug"].checked )
				{
				// fehler anzeigen
				errorStack[errorStack.length] = "ZD06";
				
				form_ok = false;
				}
			}
		

		// Absendeaufarbeitung

		if (form_ok)
			{
			theForm.action = directions[4];
			theForm.submit();
			}

		else 
			{
			showErrors(_form);
			}

		break;

	case formIDs[3]:
	
		// formCheck für Zahlungsdaten	

		// KF01: mehrere nicht ausgefüllt wird dynamisch in showErrors() ermittelt

		// KF02: Name
		if (theForm.elements["name"].value =="")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "KF02";
			
			form_ok = false;
			}
		else 
			{
			lowLight("name");
			}
		
		// KF03: BLZ 
		if (theForm.elements["plz"].value =="")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "KF03";
			
			form_ok = false;
			}
		else 
			{
			lowLight("plz");
			}

		// KF04: BLZ 
		if (theForm.elements["email"].value =="")
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "KF04";
			
			form_ok = false;
			}
		else 
			{
			lowLight("email");
			}

		// KF05: PLZ check
		if (theForm.elements["plz"].value != "" && !(theForm.elements["plz"].value > 1000 && theForm.elements["plz"].value <= 99998))
			{
			// fehler anzeigen
			errorStack[errorStack.length] = "KF05";
			
			form_ok = false;
			} 
		else if (theForm.elements["plz"].value != "")
			{
			lowLight("plz");
			}

		// KF06 email-check 

		if (!checkForm(_form))
		{
			form_ok = false;
		}

		// Absendeaufarbeitung

		if (form_ok)
			{
			theForm.action = directions[4];
			theForm.submit();
			}

		else 
			{
			showErrors(_form);
			}

		break;

		case formIDs[4]:
	
		// formCheck für Infoseiten	

		// Absendeaufarbeitung

		if (form_ok)
			{
			theForm.action = directions[2];
			theForm.submit();
			}

		else 
			{
			showErrors(_form);
			}

		break;
	}
}

case01_checked = false;
case02_checked = false;

function ea_adhocCheck(_form, _field, _value)
{
	case01_checked = false;
	case01_error = false;
	case02_checked = false;
	case02_error = false;
	do_adhocCheck(_form, _field, _value);
}

function do_adhocCheck(_form, _field, _value)
{
	theForm = document.getElementById(_form);

	// adhocCheck für Wohnungen
	if (_form == 'ahs_ea_02' && _field == 'Wohnungen')
	{
		if (parseInt(_value) > 10 )
		{
			_message = messages["ahs_ea_02"]["PD00"];
			document.getElementById('errorText').innerHTML = _message;
			document.getElementById('errorText02').innerHTML = _message;
			document.getElementById('errorsegment').style.display='inline';
			document.getElementById('errorsegment02').style.display='inline';

			highlight('Wohnungen');
			document.getElementById('bottomLine02').style.display = 'inline';
			document.getElementById('bottomLine01').style.display = 'none';
			case01_error = true;
		}
		else
		{
			lowLight('Wohnungen');
			if (!case02_error) 
			{
				document.getElementById('errorsegment').style.display = 'none';
				document.getElementById('errorsegment02').style.display = 'none';
				document.getElementById('bottomLine02').style.display = 'none';
				document.getElementById('bottomLine01').style.display = 'inline';
			}
		}
	case01_checked = true;
	if (!case02_checked) do_adhocCheck(_form, 'gewerblich', theForm.elements["gewerblich"].selectedIndex);
	}

	if (_form == 'ahs_ea_02' && _field == 'gewerblich')
	{
		if (_value == "3" || _value == "4")
		{
			_message = messages["ahs_ea_02"]["PD00"];
			document.getElementById('errorText').innerHTML = _message;
			document.getElementById('errorsegment').style.display='inline';
			document.getElementById('errorText02').innerHTML = _message;
			document.getElementById('errorsegment02').style.display='inline';

			highlight('gewerblich');
			document.getElementById('bottomLine02').style.display = 'inline';
			document.getElementById('bottomLine01').style.display = 'none';
			case02_error = true;
		}
		else
		{
			lowLight('gewerblich');
			if (!case01_error) 
			{
				document.getElementById('errorsegment').style.display = 'none';
				document.getElementById('errorsegment02').style.display = 'none';
				document.getElementById('bottomLine02').style.display = 'none';
				document.getElementById('bottomLine01').style.display = 'inline';
			}
		}
	case02_checked = true;
	if (!case01_checked) do_adhocCheck(_form, 'Wohnungen', theForm.elements["Wohnungen"].value);
	}
}

function checkForm(_id)
  {
    var warn = "";
	form = document.getElementById(_id);
      if ( js11 ) {
        if ( ! checkEmail( form.email.value, true ) && form.email.value != "" ) {

		  errorStack = new Array();
		  if (_id == 'ahs_ea_02')
		  {
				errorStack[errorStack.length] = "PD13";
		  }
		  else
		  {
				errorStack[errorStack.length] = "KF06";
		  }
		  
		  showErrors(_id);
          //alert ("Ihre E-Mail-Adresse ist syntaktisch falsch!\n");
                  return false;
        } else {
			//errorStack = new Array();
			lowLight("email");
			document.getElementById('errorsegment').style.display = 'none';
			document.getElementById('errorsegment02').style.display = 'none';
			return true;
        }
      }
    if ( warn != "" ) {
      alert( "Fehler!\n\n" + warn );
          return false;
    }
    return false;
  }

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 ;

  }

