/*==============================================================================
	FILE				:	formtestfuncs.js
	AUTHOR			:	kl (c)2005-
	DESCRIPTION	:	form specific field-testing funcs and form submitters
	USES				:	global.js (funcs and constants)
==============================================================================*/

// BOOKMARK : CONTACT-FORM TESTING FUNCTION
function checkUpContactForm(formName) {
	var	frm = document.forms[formName];

	gFields			= new Array( "name1", 		"name2",			 	"email",			"msg");
	gCapts			= new Array( "Vorname", 	"Nachname",			"e-Mail", 		"Ihre Nachricht");
	gIsSelection= new Array( false, 			false,					false,				false );
	
	return( _launchFormSubmit(frm,true) );
}

// BOOKMARK : BOOKING-FORM TESTING FUNCTION ------------------------------------
var	cMAX_PERSONS = 24;
function checkUpWwwBookForm(formName) {
	// plausibility test on date/arrival (must not be in the past)	
	var	d		=	parseInt(_getValFromForm(formName,"book_date_arr_d"),10);
	if (d < 10) {	d = "0" + d; }	
	var	m		=	parseInt(_getValFromForm(formName,"book_date_arr_m"),10);
	if (m < 10) {	m = "0" + m; }	
	var	y	=	_getValFromForm(formName,"book_date_arr_y");
	
	var dComp = parseInt(_getValFromForm(formName,"date_today"), 10);
	var dTest	=	"" + y + "" + m + "" + d;
	
	if ( dTest <= dComp ) {
		alert( 	"Hoppla! Ein Fehler wurde entdeckt:\n\n"
					+	"Das Anreisedatum muss NACH dem heutigen Tagesdatum liegen.\n"
					+	"Bitte korrigieren Sie diese Angabe.\n\n"
					+	"Danke" );
		return( false );
	}
	
	// possibility test on persons ( <= cMAX_PERSONS)	
	d	=	parseInt(_getValFromForm(formName,"book_nr_persons"),10);
	if ( d > cMAX_PERSONS ) {
		m = "Hoppla!\n\n"
			+	"Sie möchten für " + d + " Personen buchen,\n"
			+	"unser Gästehaus bietet aber nur Platz für\n"
			+ cMAX_PERSONS + " Personen\n\n."
			+	"Wollen Sie Ihre Buchungsanfrage trotzdem absenden?\n";
		if ( ! confirm(m) ) {
			return( false );
		}
	}
	// phone number test
	var	frm = document.forms[formName];
	var fld	= frm["want_contact"];
	if ( fld.checked ) {
		d	=	_getValFromForm(formName,"phone1");
		if ( ! _regexTestTelNumber(d) ) {
			alert("Hoppla. Ein Fehler wurde entdeckt.\n\n"
					+	"Sie haben angegeben, dass Sie eine telefonische\n"
					+	"Kontaktaufnahme wünschen. Allerdings haben Sie keine\n"
					+ "gültige Telefonnummer angegeben.\n\n"
					+	"Beispiel für eine gültige Telefonnummer: +43 1234 567 890\n");
			return( false );
		}
	}
		
	// finally ... the standard tests ...	
	gFields = new Array		(	"book_nr_persons",	"book_date_arr_d", 	"book_date_arr_m",	"book_date_arr_y",
													"name1",						"name2", 						"email",						"street", 
													"lkz", 							"plz", 							"ort"
												);
	gCapts	= new Array		(	"Personen", 				"Anreise/Tag",			"Anreise/Monat", 		"Anreise/Jahr",
													"Vorname", 					"Nachname",					"e-Mail", 					"Strasse",
													"Länderkennzeichen","Postleitzahl",			"Ort"
												);
	gIsSelection= new Array(false, 						false,							false,							false,
													false,						false,							false,							false,
													false,						false,							false
												);
	
	return( _launchFormSubmit(frm,true) );
}

function checkBookPersons(formName, fieldName) {
	var val = _getValFromForm(formName,fieldName);
	return( __testInteger("[Personen]", val, formName, fieldName, true, true, true) );
}
function checkBookDays(formName, fieldName) {
	var val = _getValFromForm(formName,fieldName);
	return( __testInteger("[Übernachtungen]", val, formName, fieldName, true, true, true) );
}
function onClickGolf4Days(formName, fieldName) {
	var	frm	=	document.forms[formName];
	var	fld	=	frm[fieldName];
	
	if ( fld.checked ) {
		var	fld2	=	frm["book_is_golf7"];
		fld2.checked = false;
		_setValToForm(formName, "book_days", 3);
	}
}
function onClickGolf7Days(formName, fieldName) {
	var	frm	=	document.forms[formName];
	var	fld	=	frm[fieldName];
	
	if ( fld.checked ) {
		var	fld2	=	frm["book_is_golf4"];
		fld2.checked = false;
		_setValToForm(formName, "book_days", 6);
	}
}
// BOOKMARK : BOOKING CONFIRMATION PAGE SUBMITTER
function bookingSubmitConfirm(formName) {
	var	frm	=	document.forms[formName];
	gForm = frm;
	setTimeout("submitForm()", 150);
}



//------------------------------------------------------------------------------
// BOOKMARK : GENERAL FUNCS
//------------------------------------------------------------------------------
/** doFormTest
*   performs a form-test via global parameter arrays 
* 	that have been set up previously from the check-preparing routines
* 	in the various JS-files (e.g. "tboxfuncs.js)
* @param  frm, DOM type, a form
* @return boolean, test result
*///----------------------------------------------------------------------------
function doFormTest( frm ) {
	isOk = true;
	gOut = '';
	for ( var i = 0; i < gFields.length; i++ ) {
		s = trim( getFormVal(frm, gFields[i], gIsSelection[i]) );
		if ( s.length == 0 ) {
			gOut = gOut + gCapts[i] + ": " + gStrIsAMust + "\n\n";
			isOk = false;
		}
	}
	///////////////
	return( isOk );
	///////////////
}
function _launchFormSubmit(frm,askConfirm) {
	var doIt = false;
	if( ! doFormTest(frm) ) {
    alert( gStrErrStart + gOut );
		return( false );
  }
  else {
		var doIt = ! askConfirm;
		if ( askConfirm ) {
			doIt = confirm(gStrSubmitConfirm);
		}
		else {
			doIt = true;
		}
  }
	if ( doIt ) {
		gForm = frm;
		setTimeout("submitForm()", 150);
	}
	return( true );
}

//------------------------------------------------------------------------------
// BOOKMARK : FORM GETTERS / SETTERS
//------------------------------------------------------------------------------
function getFormVal( frm, field, iscombo ) {
  var f, s;
  f = frm[field];	
	iscombo = (typeof(f.options) != "undefined");
  if( iscombo ) {
    s = trim( f.options[f.selectedIndex].text );
	}
  else {
    s = trim( f.value );
	}
  return s;
}

function _getValFromForm(formName,fieldName) {
	var frm = document.forms[formName]; 
	return ( "" + trim(frm[fieldName].value) ); 
}
function _setValToForm(formName,fieldName,val) {
	var frm = document.forms[formName]; 
	frm[fieldName].value = val;	 
}

//------------------------------------------------------------------------------
// BOOKMARK : FIELD SPECIFIC TESTING
//------------------------------------------------------------------------------
function __testInteger(fldCaption,val,formName, fieldName, isMandatory,withAlert,notNull) {
	var s 	= "";
	fldCaption += "\n";
	
	if ( val.length == 0 ) {
		if ( ! isMandatory ) {
			return( true );
		}
		else {
			s = fldCaption + gStrIsAMust;		
			_errorMsg(s);			
			showAlertBox(withAlert, s);	// call to wrapper (only alerts if withAlert == true)
			return( false );
		}
	}
	else {
		if ( val == 0 ) {
			restoreVal(formName,fieldName);
			s = fldCaption + "Der Eintrag in diesem Feld darf nicht Null (\"0\") sein.";
			_errorMsg(s);
			showAlertBox(withAlert, s);
			return( false );
		}
		else {
			if ( ! _regexTestNumbers(val) ) {
				restoreVal(formName,fieldName);
				s = fldCaption + "Ungültige Zeichen im Eingabefeld; zulässig sind:\n" + gRegExErrMsg;
				_errorMsg(s);
				showAlertBox(withAlert, s);
				return( false );
			}
		}
	}
	return( true );
}

//------------------------------------------------------------------------------
// BOOKMARK : => DATE FIELD RELATED
//------------------------------------------------------------------------------
function checkDateDay(formName,fieldName) {
	var val = _getValFromForm(formName,fieldName);
	var ok	= __testInteger("[Datumsfeld/Tag]", val, formName, fieldName, true, true, true);
	return ( ok );
}
function checkDateMonth(formName,fieldName) {
	var val = _getValFromForm(formName,fieldName);
	var ok	= __testInteger("[Datumsfeld/Monat]", val, formName, fieldName, true, true, true);
	if ( ok ) {
		if ( ! isMonthValid(val) ) {
			restoreVal(formName,fieldName);
			alert("[Datumsfeld/Monat]\nDie Monatsangabe muss zwischen \"1\" und \"12\" liegen." );
		}
	}
}
function checkDateYear(formName,fieldName) {
	var val = _getValFromForm(formName,fieldName);
	var ok	= __testInteger("[Datumsfeld/Jahr]", val, formName, fieldName, true, true, true);
	
	if ( ok ) {
		if ( val.length == 2 ) {
			val = "20" + val;
			_setValToForm(formName,fieldName,val);			
		}
	}
	return( ok );
}


//------------------------------------------------------------------------------
// BOOKMARK : => PLZ RELATED
//------------------------------------------------------------------------------
function checkPlz(formName,fieldName,isMandatory,withAlert) {
	var val = _getValFromForm(formName,fieldName);
	return( __testInteger("[Postleitzahl]", val, isMandatory, withAlert, true) );
	
}
//------------------------------------------------------------------------------
function checkMandatoryPlz(formName,fieldName) 			{ return ( checkPlz(formName,fieldName,true,	false	));	}
function checkMandatoryPlzAlert(formName,fieldName) { return ( checkPlz(formName,fieldName,true,	true	));	}
function checkOptionalPlz(formName,fieldName) 			{	return ( checkPlz(formName,fieldName,false,	false	));	}
function checkOptionalPlzAlert(formName,fieldName) 	{	return ( checkPlz(formName,fieldName,false,	true	));	}

//------------------------------------------------------------------------------
function checkMandatoryAdressField(formName, fieldName ) {
	if ( ! checkNotEmpty(formName, fieldName) ) {
		alert("ACHTUNG:\n\nFarblich hinterlegte Felder sind Pflichtfelder.\n\n"
				+	"Bitte füllen Sie diese Felder vollständig aus." );
		restoreVal(formName, fieldName);
	}
	else {
		_mkPrettyStdNameField(formName, fieldName);
	}
}

function checkOptionalAdressField(formName, fieldName ) {
	var val = trim(_getValFromForm(formName,fieldName));
	if ( val.length != 0 ) {
		_mkPrettyStdNameField(formName, fieldName);
	}
}

//------------------------------------------------------------------------------
// BOOKMARK : => TELEPHONE FIELD VALUES
//------------------------------------------------------------------------------
function checkTelefonNr(formName, fieldName, isMandatory, withAlert ) {
	var val = trim(_getValFromForm(formName,fieldName));
	gRegExErrMsg = "";
	if ( ! _regexTestTelNumber(val) ) {
		var s = "[Telefonnummer]\n" + "Das Feld beinhaltet fehlerhafte Angaben; zulässige Zeichen:\n" + gRegExErrMsg;		
		_errorMsg(s);
		showAlertBox(withAlert,s);
		restoreVal(formName, fieldName );
	}
}

//------------------------------------------------------------------------------
function checkMandatoryTelNr(formName, fieldName) 			{	checkTelefonNr(formName, fieldName, true, false	);	}
function checkMandatoryTelNrAlert(formName, fieldName) 	{	checkTelefonNr(formName, fieldName, true, true 	);	}
function checkOptionalTelNr(formName, fieldName) 				{	checkTelefonNr(formName, fieldName, false,false );	}
function checkOptionalTelNrAlert(formName, fieldName) 	{	checkTelefonNr(formName, fieldName, false,true 	);	}


//------------------------------------------------------------------------------
// BOOKMARK : => eMAIL FIELDS
//------------------------------------------------------------------------------
function checkEMail(formName, fieldName, isMandatory) {
	var val = _getValFromForm(formName,fieldName);
	if ( ! _regexTestEMail(val) ) {
		if ( ! isMandatory ) {
			restoreVal( formName, fieldName );
			_errorMsg("[e-Mail] => " + gRegExErrMsg);
		}
		else {
			restoreVal( formName, fieldName );
			_warningMsg("[e-Mail] => " + gRegExErrMsg);
		}
	}
}
//------------------------------------------------------------------------------
function checkMandatoryEMail(formName, fieldName) {	checkEMail(formName, fieldName, true);	}
function checkOptionalEMail(formName, fieldName) 	{	checkEMail(formName, fieldName, false);	}


//------------------------------------------------------------------------------
// BOOKMARK : STRING MANGLING FUNCS
//------------------------------------------------------------------------------
function _capitalizeSubstring(s,startPos,endPos) {
	if ( s.length == 0 ) {
		return( s );
	}
	return( s.substr(startPos,endPos).toUpperCase() + s.substring(endPos) );   
}

//------------------------------------------------------------------------------
/** _mkPrettyStdNameField
*   Capitalizes first letter of fieldvalue "fieldName" in form "formName"
*///----------------------------------------------------------------------------
function _mkPrettyStdNameField(formName,fieldName) {
	var val =	_getPrettyStdNameField(formName,fieldName);
	if( val.length == 0 )	{ 
		return( val );
	}
	_setValToForm(formName,fieldName,val);
}
function _getPrettyStdNameField(formName,fieldName) {
	var val = trim(_getValFromForm(formName,fieldName));
	return( _capitalizeSubstring(val,0,1) );
}

