// $$ Thursday, 21 Nov 2007 16:13:40 Uhr wdo $$
// RegEx in ort, strasse, vorname, name 'entschärft'
// Lösung für skandinawische Umlaute noch offen.


// für feldprüfung

var KLDomains = Array('de', 'be', 'sk', 'nl', 'no', 'fr', 'fi', 'ch');

function check_errMsg( errMsg, caller ){

try
{ errMsgText = $( errMsg ).innerHTML; }
catch (jsError)
{ 
	console.log("Error with MSG '%s'", errMsg );
	// console.log( "Problem with :", caller.name );
	// console.error( errMsg, "fehlt in :",document,"\n\t Error:", jsError );
	return errMsg;
	}
console.log('MSG good-> "%s"', errMsgText );
return errMsgText;
}

function isLocalized( errMsg, caller )
{
	if ( ( !errMsg.length) || (errMsg.substring(0,2)=="**") ){
		console.warn( 'nicht lokalisiert:', errMsg.substring(0,8), "in: ",caller );
		return errMsg; }
	return errMsg;
}

function kdnr_req( kd_nr1_obj, kd_nr2_obj, defaultMsg )
{
	ergArr = new Array();
	
	// regEx 
	 var regEx_kdNr1=/[0-9]{7}/;
	 var regEx_kdNr2=/[0-9]{2}/;
	
	// spezial für adva-testlogin 'testkon / to' etc.
	if (kd_nr1_obj.value=="testkon" && kd_nr2_obj.value=="to") 
	{
		console.info( "/ord/login: TESTUSER-Login" );
		hideError( kd_nr1_obj );
		return ergArr;
	}
	 if( !kd_nr1_obj.value.length || !kd_nr2_obj.value.length )
	 {	// TB1805 "Die Kundennummer ist nicht gültig."
		if (!defaultMsg)
			{var errMsg = check_errMsg('errMsg1805', this );}
		else {var errMsg = defaultMsg;}
		
		ergArr.push( kd_nr1_obj, errMsg );
		return ergArr;
	  }
	 if(kd_nr1_obj.value.match(regEx_kdNr1 ) == null)
	 {	// TB1806 "Der vordere Teil ist nicht richtig!"
		if (!defaultMsg)
			{var errMsg = check_errMsg('errMsg1806', this );}
		else {var errMsg = defaultMsg;}
	
		ergArr.push( kd_nr1_obj, errMsg );
 		return ergArr;
	  } 
	 if(kd_nr2_obj.value.match(regEx_kdNr2 ) == null)
	 {	// TB1807 "Der hintere Teil ist nicht richtig!"
		if (!defaultMsg)
			{var errMsg = check_errMsg('errMsg1807', this );}
		else {var errMsg = defaultMsg;}
		
		ergArr.push( kd_nr1_obj, errMsg );
	  	return ergArr;
	  }
	hideError( kd_nr1_obj );
	return ergArr;
}

function datum_req( tag_obj, monat_obj, jahr_obj )
/* 	erwartet tag,monat,jahr als Referenzen zu den entsp. FORM-input-feldern(object).
	4.modi-> 	"zp" für Zahlpause oder 
				"lp" für Lieferpause oder 
				"ap" für Altersprüfung oder
				"zu" für 'in zukunft' 
		default ist 'ap' für Altersprüfung 
	5.hideObj -> 	flag, ob hideError() gerufen werden soll, sofern die Inhaltsprüfung
					des Datums positiv endet.
*/
{
	//Rückgabearray -> Liste mit [ Feld-Obj.-Referenz, Fehlermeldung ]
	ergArr = new Array();
	// regEx
	var regEx_tag=/^0?[1-9]{1}$|(1|2)[0-9]{1}$|^3[01]$/;
	var regEx_monat=/(^0?[1-9]{1}$|^1[012]{1}$){1}/;
	var regEx_jahr=/(^1(8|9)[0-9]{2}|^20[0-1]{1}[0-9]{1})/;

	// syntaktische Prüfung der Datums-elemente per regEx
	
 	//Tag 
 	 if( tag_obj.value.match(regEx_tag) == null )
			{	//TB1796
			var errMsg = check_errMsg('errMsg1796', this );
			ergArr.push( tag_obj, errMsg );
			//console.info( "TAG des Datums ist nicht ok.(%s)", tag_obj.name );
			return ergArr;
			}
 	//Monat
 	 if( monat_obj.value.match(regEx_monat) == null )
			{	//TB1797
			var errMsg = check_errMsg('errMsg1797', this );
			ergArr.push( monat_obj, errMsg );
			//console.info( "MONAT des Datums ist nicht ok.(%s)", monat_obj.name );
			return ergArr;
			}
 	//Jahr
 	if( jahr_obj.value.match(regEx_jahr) == null )
			{	//TB1798
			var errMsg = check_errMsg('errMsg1798', this );
			ergArr.push( jahr_obj, errMsg );
			//console.info( "JAHR des Datums ist nicht ok.(%s)", jahr_obj.name );
			return ergArr;
			}
	//ende der syntax-Prüfung -> datum ok
	console.info( "datum_req: Syntax des Datums(%s.%s.%s) ist ok.",tag_obj.value, monat_obj.value, jahr_obj.value );

	//jetzt
 	heute = new Date();
	heute = heute.getTime();
	
	//const TAG
	var TAG = 60 * 60 * 24 * 1000;
	var JAHR = TAG * 356;
	var J18 = JAHR * 18;
	var J110 = JAHR * 110;
	
	//Eingabe-Datum des Users
 	in_Tag = new Date( 
		parseInt( jahr_obj.value,10 ),
 		parseInt( monat_obj.value,10 ) - 1,
 		parseInt( tag_obj.value,10 )
	);
	
	var in_Tag = in_Tag.getTime();
	
	//wurde param 'modus' mitgegeben ?
	if (datum_req.arguments.length > 3)
	{ 
		modus = datum_req.arguments[3]; 
		hideObj = datum_req.arguments[4]; 
	}
	//nein, dann default 'Altersprüfung'
	else { modus = "ap"; }
	
	console.info("\tModus ist: %s",modus);
	
	switch( modus )
	{ //Altersprüfung - Geburtstag
	case "ap":
		{
		mj = heute - J18 ;
		if (mj < in_Tag ) { //TB1799
			errMsg = check_errMsg('errMsg1799', this );
			ergArr.push( tag_obj, errMsg );
			return ergArr;
			}
		else if ( in_Tag < ( heute - J110) ){//TB0918
			errMsg = check_errMsg('errMsg918', this );
			//dateStr = ppDate(myDate);
			ergArr.push( tag_obj, errMsg );
			return ergArr; };
		}//eo-case "ap"
		break;
	case "zp":
	  { //Zahlpause bis max. 180 Tage
		tage=180; 
		maxTag = heute + (tage * TAG);
		if (in_Tag < heute) 
			{//TB1802
			errMsg = check_errMsg('errMsg1802', this );
			ergArr.push( tag_obj, errMsg);
			return ergArr;
			}
		else if ( (in_Tag>maxTag && in_Tag>heute) || in_Tag < heute)
		 	{//TB1803
			myDate = new Date(maxTag-TAG);
			errMsg = check_errMsg('errMsg1804', this );
			dateStr = ppDate(myDate);
			errMsg = errMsg.replace('+ppDate(myDate)+', dateStr);
			console.log( "Zahl/Lieferpause : %s:", errMsg );
			ergArr.push( tag_obj, errMsg );
			}
		}//eo-case "zp"
		break;
	case "lp":
		{ //Lieferpause bis max. heute plus 90 Tage
		tage=90; 
		maxTag = heute + ( tage * TAG );
		
		if (in_Tag < heute) 
			{//TB1802
			errMsg = check_errMsg('errMsg1802', this );
			ergArr.push( tag_obj, errMsg );
			return ergArr;
			}
		else if (in_Tag>maxTag && in_Tag>heute) 
			{//TB1803
		 	myDate = new Date(maxTag-TAG);
			errMsg = check_errMsg('errMsg1803', this );
			dateStr = ppDate(myDate);
			errMsg = errMsg.replace('+ppDate(myDate)+', dateStr);
			console.log( "Zahl/Lieferpause : %s:", errMsg );
			ergArr.push( tag_obj, errMsg);
			}//eo-if
		}//eo-case "lp"
		break;
	case "zu":
		{//datum muss größer heute sein
		if ( in_Tag < heute )
		{//TB1802
			errMsg = check_errMsg('errMsg1802', this );
			ergArr.push( tag_obj, errMsg );
			return ergArr;
		}//eo-if
		}//eo-case "zu"
		break;
	} //eo-switch
	
	// datum ist formell und inhaltlich ok
	if ( !$defined('hideObj') )
		{ hideError( tag_obj ); }

	return ergArr;
}

function telefon_req( vorw_obj, phone_obj, errMsg1, errMsg2 )
{
	ergArr = new Array();

	// regEx 
	var regEx_vorw=/(0[0-9]{2,4})/;
	var regEx_phone=/([0-9]{3,12})/;
	
 	// vorwahl
	if (!errMsg1)
		{ var errMsg1 = check_errMsg( 'errMsg1808', this );}

 	 if( vorw_obj.value.match(regEx_vorw) == null )
     {	console.info( "VORWAHL ist nicht ok.(%s)", vorw_obj.name );
		ergArr.push( vorw_obj, errMsg1 );
		return ergArr; }

 	// telefon
	if (!errMsg2)
		{ var errMsg2 = check_errMsg( 'errMsg1809', this );}

 	 if( phone_obj.value.match(regEx_phone) == null )
     {	console.info( "TELFON-Nr. ist nicht ok.(%s)", phone_obj.name );
		ergArr.push( phone_obj, errMsg2 );
		return ergArr; };

	hideError( vorw_obj );
	return ergArr;
}

// mandantenspez. für KLNO ohne Vorwahl
function NO_telefon_req( phone_obj, errMsg2 )
{
	ergArr = new Array();

	// regEx 
	var regEx_phone=/([0-9]{3,15})/;

 	// telefon
	if (!errMsg2)
		{ var errMsg = check_errMsg( 'errMsg1809', this ); }

 	 if( phone_obj.value.match(regEx_phone) == null ) {
		console.info( "TELFON-Nr. ist nicht ok.(%s)", phone_obj.name );
		ergArr.push( phone_obj, errMsg2 );
		return ergArr; };
	
	hideError( phone_obj );
	return ergArr;
}

function plzstr_req( plz_obj, ort_obj)
{
	ergArr = new Array();
	
	//weiche: springt lokalisierte Funktion an. Bsp.: 'NL_plzstr_req()'
	if ( KLDomains.contains( plzstr_req.arguments[0] )) {
		//lokalisierte Version
		locale = plzstr_req.arguments[0].toUpperCase() + "_";
		console.log('LOCALE = %s', locale);
		//theArgs = new Array(arguments).slice(1);
		return eval( locale+'plzstr_req( arguments )' );
	}
	// regEx 
	 var regEx_plz=/[0-9]{4,8}/;
	// var regEx_ort=/^([a-zA-ZäöüÄÖÜß\-]{1,34})/;
	var regEx_ort=/^\S{1,40}/;

	if (arguments.length==4){ 
		msg1 = arguments[2];
		msg2 = arguments[3]; }
	else {//default-msgs
		msg1 = check_errMsg( 'errMsg1810', this );
		msg2 = check_errMsg( 'errMsg1811', this );}
	
	 if(plz_obj.value.match( regEx_plz ) == null)
	 {	
		ergArr.push( plz_obj, msg1 );
 		return ergArr; } 
	
	 if(ort_obj.value.match(regEx_ort ) == null)
	 {
		ergArr.push( ort_obj, msg2 );
		return ergArr; }

	console.info( "CALL: hideError(%s)", plz_obj.name );
	hideError( plz_obj );
	return ergArr;
}

function NL_plzstr_req( args )
{
	plz1_obj = args[1] ;
	plz2_obj = args[2] ;

	// edited by FMU: nur uppercase wenn da
	if (plz2_obj) {
			plz2_obj.value = plz2_obj.value.toUpperCase();
	}
	ort_obj = args[3] ;
	
	ergArr = new Array();
	
	// regEx 
	var regEx_plz1=/[0-9]{4}/;
	var regEx_plz2=/[A-Z]{2}/;
	var regEx_ort=/^\S{1,40}/;
	
	//default-msgs
//	var msg1 = check_errMsg( 'errMsg1810', this );
	var msg2 = check_errMsg( 'errMsg1811', this );
	
	if (arguments.length > 3)
		{ msg1 = arguments[3]; }
	else { var msg1 = check_errMsg( 'errMsg1810', this ); }
	
	if (plz1_obj.value.match( regEx_plz1 ) == null) {
		ergArr.push( plz1_obj, msg1 );
		console.info( "PLZ1 nicht ok: %s", plz1_obj.name );
 		return ergArr; 
	}
	else if (plz2_obj.value.match( regEx_plz2 ) == null) {
		ergArr.push( plz1_obj, msg1 );
		console.info( "PLZ2 nicht ok: %s", plz2_obj.name );
 		return ergArr; 
	}
	else if (ort_obj.value.match(regEx_ort ) == null){
		if (arguments.length > 4)
			{ var msg2 = arguments[4]; }
		else { var msg2 = check_errMsg( 'errMsg1811', this ); }

		console.info( "Die Ortsangabe ist nicht richtig: %s", ort_obj.name );
		ergArr.push( ort_obj, msg2 );
		return ergArr;
	};

	hideError( plz1_obj );
	hideError( plz2_obj );
	hideError( ort_obj );
	return ergArr;
}

function betrag_req( euro_obj, cent_obj )
{
/* prüft eine betragseingabe in die felder euro und cent.
akzeptiert werden 4-stellige Beträge vor dem Komma und 2-stellig dahinter.*/

	ergArr = new Array();
	
	// regEx 
	var regEx_betrag=/^[0-9]{1,4},[0-9]{0,2}/;
	
	var betrag = new Array( euro_obj.value, cent_obj.value).join();
	if( betrag.match( regEx_betrag ) == null)
	{	//TB1812
		errMsg = check_errMsg( 'errMsg1812', this );
		ergArr.push( euro_obj, errMsg );
		// ergArr.push( euro_obj, "Betrag bitte richtig angeben: Bsp.: 12,45 ");
	  	return ergArr;
	  } 
	hideError( euro_obj );
	return ergArr;
}

function bonus_req( bon_obj, errMsg )
{
	ergArr = new Array();
	if (!errMsg)
		{ errMsg = check_errMsg( 'errMsg1813', this ); }
	
	 var regEx_bon=/^[a-zA-Z0-9]{4}$/;

	if(bon_obj.value.match(regEx_bon ) == null)
	{	
		ergArr.push( bon_obj, errMsg );
  		return ergArr;
  	}
	hideError( bon_obj );
	return ergArr;
}

function gut_req( gut_obj, errMsg )
{
	ergArr = new Array();
	
	// regEx 
	 var regEx_gut=/^[a-zA-Z0-9]{4}$/;

	 if(gut_obj.value.match(regEx_gut ) == null)
	 {	//TB1814
		errMsg = check_errMsg( 'errMsg1814', this );
		ergArr.push( gut_obj, errMsg );
		console.info( "Gutschein: falsche Syntax.", gut_obj.name );
	  return ergArr;
	  }
	hideError( gut_obj );
	return ergArr;
}

function vorname_req( vorname_obj, errMsg )
{
	ergArr = new Array();
	
	if (!errMsg)
		{ errMsg = check_errMsg( 'errMsg170', this ); }

	// regEx 
	//var regEx_vorname=/^([\-A-Za-zöäüÄÖÜß]+ ?){1,3}/;
	var regEx_vorname=/^\S{1,40}/;
	
	 if(vorname_obj.value.match(regEx_vorname ) == null)
	 {
		ergArr.push( vorname_obj, errMsg );
		console.info( "Vorname(%s): falsche Syntax.", vorname_obj.value );
		return ergArr;
	  }//-if

	hideError( vorname_obj );
	return ergArr;
}

function nachname_req( nachname_obj, errMsg )
{
	ergArr = new Array();
	// errMsg171 = "Bitte geben Sie Ihren Nachnamen ein.";

	if (!errMsg)
		{ errMsg = check_errMsg( 'errMsg171', this ); }

//	var regEx_nachname=/^([\-A-Za-zöäüÄÖÜß]+ ?){1,3}/;
	var regEx_nachname=/^\S{1,40}/;

	 if(nachname_obj.value.match(regEx_nachname ) == null)
	 {
		ergArr.push( nachname_obj, errMsg );
		console.info( "Nachname('%s'): falsche Syntax.",nachname_obj.value );
		return ergArr;
	  }//-if
	hideError( nachname_obj );
	return ergArr;
}

function strasse_req( str_obj, errMsg )
{
	ergArr = new Array();
	
	// regEx 
	//var regEx_str=/^[0-9a-zA-ZöäüÄÖÜß\-]{1,34}/;
	var regEx_str=/^\S{1,40}/;

	 if (str_obj.value.match(regEx_str ) == null)
	 {	
		if (arguments.length > 1 )
			{ errMsg = arguments[1]; }
		else { errMsg = check_errMsg( 'errMsg1817', this ); }
		
		ergArr.push( str_obj, errMsg );
		console.info( "Strasse: falsche Syntax." );
		return ergArr;
	  }
	hideError( str_obj );
	return ergArr;
}

function email_req( email_obj, errMsg )
{
	ergArr = new Array();

	// errMsg = "Geben Sie Ihre email-Adresse an.";
	if (!errMsg)
		{ errMsg = check_errMsg( 'errMsg302', this ); }
	
	if ( ( email_obj.value.length==0) && (arguments[1] != '') ){
		hideError( email_obj );
		return ergArr;
	};
	
	if ( !validateEmail( email_obj.value ) ) 
	{
		ergArr=ergArr.concat( email_obj, errMsg );
	}
	else { hideError( email_obj );}

	return ergArr;
}

// subs für feldprüfungen

function validateEmail(email)
// aus anderem JS-validator?
{
    if(email.length <= 0)
	{
	  return false;
	}
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) 
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}

function gps( obj, regEx, mymsg)
//generell purpose regEx tester
{
	if (!obj) 
	{
		console.error("jsForm.js:gps => kein Objekt erhalten! ABBRUCH.");
		a = new Array();
		return a ;
	}
		
	if(obj.value.match( regEx ) == null)
		{ return new Array( obj, mymsg ); }
	else 
	{
		if ( !gps.arguments[3])
			{hideError( obj );}
		a = new Array();
		return a ;
	}
}//eo-func-gps

function ppDate( myDate ) {
// pretty print Date
	if (arguments.length==1) {var locale="de";};
	
	// - einen Tag 
	dom = myDate.getDate();
	month = myDate.getMonth();
	year = myDate.getFullYear();

	var months = new Array("Jan", "Feb", "Mar", "Apr", "Mai", "Jun",
							"Jul", "Aug", "Sep", "Okt", "Nov", "Dec");

	var dows = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");

	switch(locale)
	{
	case "de":
		{//=>'27. Sep. 2007'
			var mymsg = dom+". "+months[month]+". "+year;
			return mymsg;
		}//eo-case "de"
		break;    
	default:
	{//warnen
		console.warn("func(ppDate): locale '%s' nicht definiert.", locale);
		return myDate.toLocaleString();
	}//eo-case-default
	}//eo-switch "locale"
	
}//eo-function-ppDate

function ValidDatum(tt,mm,jj,mode) {
// datum innerhalb zulässigem Bereich
// von Wolfgang, wahrscheinlich obsolet ?(as)
  if (errfound) return;
	if (tt.value == '') return true;

	var inday_comp = jj.value+mm.value+tt.value;
	if(mode == 'wt')
		 var maxday = '[makedate days=90 log=T]';																																// maximal zulässiges Datum YYYY-MM-DD
	if(mode == 'zp')
		 var maxday = '[makedate days=270 log=T]';																															// maximal zulässiges Datum YYYY-MM-DD
	var maxday_comp = maxday.substring(0,4)+maxday.substring(5,7)+maxday.substring(8,10);						// -> YYYYMMDD 
	var maxday_disp = maxday.substring(8,10)+'.'+maxday.substring(5,7)+'.'+maxday.substring(0,4);
	// -> DD.MM.YYYY

	if (tt.value != parseInt(tt.value,10) || mm.value != parseInt(mm.value,10) || tt.value != parseInt(tt.value,10) || inday_comp > maxday_comp ) {
			window.alert("Das maximal zulässige Datum ist der "+maxday_disp+".");
			return false;
			}
	return true;
}

function processErrors( ergArr )
// erwartet Array mit paarwweisen Form-Objekten & Fehlermeldungen
// z.B: Array( nachname(objekt), "meldung"(string),  )
{ 
	var submitForm = false;
	
	while (ergArr.length > 0)
	{
		mymsg = ergArr.pop();
		obj = ergArr.pop();
		
		console.info("\t -> Fehler in Feld=%s, msg=%s",obj.name, mymsg );
		if (obj.name=="w_wunsch") 
		{
			console.warn("IE6/7 sonderfall.");
			myShowError( obj, mymsg );
			submitForm = false;
		}
		else 
		{
			showError( obj, mymsg );
			submitForm = false;
		};
	}
	// console.info("submit ist: ",submitForm);
	return submitForm;
}

// für userfeedback an den feldern

function findErrorParent( myObj ) {
	
	while ( !myObj.hasClass('error_big_wrap3') ) {
	   myObj = myObj.getParent();
	}
	return myObj;
	// res = myObj;
	// for (var i=0; i < level; i++) {
	// 	res = res.getParent();
	// };
	// return res;
}

function getUp ( myObj, level) {
	
	res = myObj;
	for (var i=0; i < level; i++) {
		res = res.getParent();
	};
	return res;
}

function showError(objValue, strError)
// zeichnet Rahmen um FORM-Feld und plaziert 
// 'strError'(string) im Rahmen oben links.
{
	var errorparent = $(objValue.getParent().getParent());
	var errorbox = errorparent.getFirst();

	// make advice
	advice = new Element('div').addClass('validation-advice').setStyle('visibility','hidden').appendText(strError);

	// make fx for slidein and opacity
	var slideErrorboxIn = new Fx.Style(errorbox, 'height',{duration:500, transition:Fx.Transitions.Sine.easeInOut});
	var showAdviceIn = new Fx.Style(advice, 'opacity',{duration:500, transition:Fx.Transitions.Sine.easeInOut});
	
	if (errorbox.hasClass('error_occured')) {
		advice.injectInside(errorbox);
	} else {
	advice.injectInside(errorbox);
	showAdviceIn.start(1);
	}
	
	var adviceHeight = advice.getSize().size.y;
	
	if (errorbox.hasClass('error_occured')) {
		showAdviceIn.start(1);
	} else {
		slideErrorboxIn.start(adviceHeight);
	}
	
	// add striped class to all error boxes
	getUp(objValue,4).addClass('error_stripes').addClass('error_1');
	objValue.addClass('error_5');
	getUp(objValue,3).addClass('bgwhite');
	getUp(objValue,1).addClass('error_4');
	getUp(objValue,2).addClass('bgwhite').addClass('error_3');
	getUp(objValue,2).getChildren().filterByTag('label').addClass('red');
	
	// add marker class to error message container
	errorbox.addClass('error_occured');
}

function myShowError(obj, strError)
//geklonte 'showError'-function für IE6/7
{	
	var errorparent = $('big_wrap3');
	var errorbox = $('myErrorMsg');
	// make advice
	advice = new Element('div').addClass('validation-advice').setStyle('visibility','hidden').appendText(strError);

	// make fx for slidein and opacity
	var slideErrorboxIn = new Fx.Style(errorbox, 'height',{duration:500, transition:Fx.Transitions.Sine.easeInOut});
	var showAdviceIn = new Fx.Style(advice, 'opacity',{duration:500, transition:Fx.Transitions.Sine.easeInOut});
	
	if (errorbox.hasClass('error_occured')) {
		advice.injectInside(errorbox);
	} else {
	advice.injectInside(errorbox);
	showAdviceIn.start(1);
	}

	var adviceHeight = advice.getSize().size.y;
	
	if (errorbox.hasClass('error_occured')) {
		showAdviceIn.start(1);
	} else {
		slideErrorboxIn.start(adviceHeight);
	}
	
	// add striped class to all error boxes

	$('big_wrap1').addClass('error_stripes').addClass('error_1');
	$('w_wunsch').addClass('error_5');
	$('big_wrap3').addClass('bgwhite');
	$('myErrorMsg').addClass('error_4');
	$('big_wrap2').addClass('bgwhite').addClass('error_3');
	$('big_wrap2').getChildren().filterByTag('label').addClass('red');
	
	// add marker class to error message container
	errorbox.addClass('error_occured');
}

function hideError(objValue)
//gegenstück zu 'showError'-function
{
	//remove stripped borders
	var errorparent = $(objValue.getParent().getParent());
	var errorbox = errorparent.getFirst();
	
	//remove marker class and empty error container
	errorbox.removeClass('error_occured');
	errorbox.empty();

	//shrink error container box and remove all error styles
	var slideErrorboxOut = new Fx.Style(errorbox, 'height',{duration:500, transition:Fx.Transitions.Sine.easeInOut});
	slideErrorboxOut.start(0);

	getUp(objValue,4).removeClass('error_stripes').removeClass('error_1');
	objValue.removeClass('error_5');
	getUp(objValue,3).removeClass('bgwhite');
	getUp(objValue,1).removeClass('error_4');
	getUp(objValue,2).removeClass('bgwhite').removeClass('error_3');
	getUp(objValue,2).getChildren().filterByTag('label').removeClass('red');
}

function myHideError (obj) 
//gegenstück zu 'myShowError'-function
//entfernt Rahmen von Form-Feldern für IE6/7
{

	var errorparent = $('big_wrap3');
	var errorbox = $('myErrorMsg');

	//remove marker class and empty error container
	errorbox.removeClass('error_occured');
	errorbox.empty();

	var slideErrorboxOut = new Fx.Style(errorbox, 'height',{duration:500, transition:Fx.Transitions.Sine.easeInOut});
	slideErrorboxOut.start(0);

	$('big_wrap1').removeClass('error_stripes').removeClass('error_1');
	$('w_wunsch').removeClass('error_5');
	$('big_wrap3').removeClass('bgwhite');
	$('myErrorMsg').removeClass('error_4');
	$('big_wrap2').removeClass('bgwhite').removeClass('error_3');
	$('big_wrap2').getChildren().filterByTag('label').removeClass('red');
}

function cleanUpForm( theForm )
//vereinfachung: entfernt alle Rahmen innerhalb der FORM 'theForm'(object)
//entfernt nur von 'text'-, 'radio'- und 'select-one'-feldern
{
	//return;
	for (var i=0; i < theForm.length; i++) 
	{
		obj = theForm.elements[i];
		// if ( obj.type != "select-one" && obj.type != "hidden" && obj.type != "button" && obj.type != "radio" ) 
		if ( obj.type == "text" || obj.type == "radio" ) 
			{ hideError( obj ); }
		else if (obj.type == "select-one" )
			{ myHideError( obj ); }
	}
}

// utils & scratch

