
/* ============================================================
Description 	: This script allows validated a form submition
Author 		: Julien DiGraci
Date 		: 29/09/2000
Last update : 30/07/2002 by Xavier VINCENT
============================================================ */

// Structure definition

function searchId( id ) {
	isearch = 0; tsearch = false;
	while ( isearch < this.element.length && !tsearch ) {
		if ( this.element[ isearch ].id == id ) {
			tsearch = true;
		}
		if ( !tsearch ) isearch++;
	} 
	return ( tsearch ) ? isearch : -1 ;
} 

function DForm( formId ){
	this.id = formId;
	this.element = new Array();
	this.searchId = searchId;
}

function DElement( id, label, datatype, displaytype, isMandatory , format ){
	this.id = id;
	this.label = label;
	this.datatype = datatype;
	this.displaytype = displaytype;
	if( isMandatory == "true" || isMandatory == "1" )
		this.isMandatory = true;
	else
		this.isMandatory = false;
	this.format = '' + format;
}

// changeClass method
function changeClass( id, classname ){
	if( document.all ) 
		document.all(id).className = classname;
}

// Display Error Message method
function displayErrorMessage( message, formObject, indexOfElement ){

	// Display a alert message
	alert( message + " [" + formObject.element[indexOfElement].label + "]" );

	// Changing element class
	/*changeClass( formObject.element[indexOfElement].id, "inputError" );*/
	var tmp = eval('document.' + formObject.id + '.' + formObject.element[indexOfElement].id);
	if ( 	( formObject.element[indexOfElement].displaytype != "LISTBOX" ) 
		&&	( formObject.element[indexOfElement].displaytype != "LISTBOXMULTIPLE" ) 
		&& 	( formObject.element[indexOfElement].displaytype != "CALENDAR" )
		&& 	( formObject.element[indexOfElement].displaytype != "HIDDEN" )
		&& 	( formObject.element[indexOfElement].displaytype != "RADIO" ) ) {
		tmp.focus();
	}
	return false;
}

// checkForm method
function checkForm( formObject ){
	// CHECKING MANDATORY ELEMENT
	for( cfi=0; cfi<formObject.element.length; cfi++ ){
		// Retrieving original class
		/*changeClass( formObject.element[cfi].id, "input" );*/

		// If element mandatory
		if( formObject.element[cfi].isMandatory ){
			// If displaytype is LISTBOX
			if ( formObject.element[cfi].displaytype == "LISTBOX" ) {
				textToEval = "document." + formObject.id + "." +
					formObject.element[cfi].id + "[" +
					"document." + formObject.id + "." +
					formObject.element[cfi].id + ".selectedIndex].value";
			}
			// If displaytype is LISTBOXMULTIPLE
			else {
				if ( formObject.element[cfi].displaytype == "LISTBOXMULTIPLE" ) {
					var listm = eval("document." + formObject.id + "." + formObject.element[cfi].id);
					textToEval = new String();
					for ( counterlist = 0 ; counterlist < listm.options.length ; counterlist++ ) {
						textToEval += listm.options[counterlist].value;
					}
				}
				// If displaytype is RADIO
				else {
						if ( formObject.element[cfi].displaytype == "RADIO" ) {
							var button = eval("document." + formObject.id + "." + formObject.element[cfi].id);
							textToEval = new String();	
							test = false;
							counterb = 0;
							while ( ( counterb < button.length ) && !test ) {
								test = ( button[counterb].checked == true );
								counterb++;
							}
							counterb--;
							if ( test ) textToEval = "document." + formObject.id + "." + formObject.element[cfi].id + "[" + counterb + "].value";
						}		
						else {
							textToEval = "document." + formObject.id + "." +
							formObject.element[cfi].id + ".value";
						}
				}
			}	
			if ( formObject.element[cfi].displaytype != "LISTBOXMULTIPLE" ) {
				tmpValue = "" + eval(textToEval);
				if( tmpValue == "" )
					return displayErrorMessage( LANG_ERROR_MANDATORYFIELD, formObject, cfi );
			}
			else {	
				if ( textToEval == "" )
					return displayErrorMessage( LANG_ERROR_MANDATORYFIELD, formObject, cfi );
			}
		}
	}

	// CHECKING ELEMENT DATATYPE FORMAT
	for( cfi=0; cfi<formObject.element.length; cfi++ ){
		// If displaytype is TEXT, TEXTAREA, INPUT, SMALLINPUT, LABEL, HIDDEN
		if( formObject.element[cfi].displaytype == "TEXT"
		||  formObject.element[cfi].displaytype == "INPUT"
		||  formObject.element[cfi].displaytype == "INSTANCE_COUNTER"
		||  formObject.element[cfi].displaytype == "LABEL"
		||  formObject.element[cfi].displaytype == "HIDDEN"
		||  formObject.element[cfi].displaytype == "SMALLINPUT"
		||  formObject.element[cfi].displaytype == "TEXTAREA" ){
			textToEval = "document." + formObject.id + "." +
				formObject.element[cfi].id + ".value";
			tmpValue = "" + eval(textToEval);
			
			if ( formObject.element[cfi].format != '' && formObject.element[cfi].format != 'null' && formObject.element[cfi].format != 'undefined' ) {
				e = new RegExp( '' + formObject.element[cfi].format );
				if ( !e.test( tmpValue ) )
					return displayErrorMessage( LANG_ERROR_INVALIDCHARACTERS , formObject , cfi );
			}

			// If datatype is DATE
			if( formObject.element[cfi].datatype == "DATE" )
				if( !isDate( tmpValue ) )
					return displayErrorMessage( LANG_ERROR_WRONGFORMAT, formObject, cfi );

			// If datatype is DECIMAL, MONEY , NUMERIC
			if( formObject.element[cfi].datatype == "DECIMAL"
			||  formObject.element[cfi].datatype == "MONEY"
			||  formObject.element[cfi].datatype == "NUMERIC" )
				if( !isNumeric( tmpValue ) )
					return displayErrorMessage( LANG_ERROR_WRONGFORMAT, formObject, cfi );
			
			// If datatype is INTEGER
			if( formObject.element[cfi].datatype == "INTEGER" )
				if( !isInteger( tmpValue ) )
					return displayErrorMessage( LANG_ERROR_WRONGFORMAT, formObject, cfi );
			
			// If datatype is TIME
			if( formObject.element[cfi].datatype == "TIME" )
				if( !isTime( tmpValue ) )
					return displayErrorMessage( LANG_ERROR_WRONGFORMAT, formObject, cfi );

		}
	}

	// PREPARING ELEMENT TO SQL
	for( cfi=0; cfi<formObject.element.length; cfi++ ){
		// If displaytype is TEXT, TEXTAREA, INPUT
		if( formObject.element[cfi].displaytype == "TEXT"
		||  formObject.element[cfi].displaytype == "INPUT"
		||  formObject.element[cfi].displaytype == "INSTANCE_COUNTER"
		||  formObject.element[cfi].displaytype == "HIDDEN"
		||  formObject.element[cfi].displaytype == "TEXTAREA" ){
			textToEval = "";
			
			// If datatype is REFERENCE, LABEL, TEXT, URL, LARGE_TEXT
			if( formObject.element[cfi].datatype == "REFERENCE"
			||  formObject.element[cfi].datatype == "LABEL"
			||  formObject.element[cfi].datatype == "TEXT"
			||  formObject.element[cfi].datatype == "URL"
			||  formObject.element[cfi].datatype == "LARGE_TEXT" )
				textToEval = "document." + formObject.id + "." +
					formObject.element[cfi].id + ".value " +
					" = doubleQuote(\'\' + " +
					"document." + formObject.id + "." +
					formObject.element[cfi].id + ".value " +
					");" + 
					"document." + formObject.id + "." +
					formObject.element[cfi].id + ".value " +
					" = doubleBackSlash(\'\' + " +
					"document." + formObject.id + "." +
					formObject.element[cfi].id + ".value " +
					");";

			// If datatype is DECIMAL, MONEY
			if( formObject.element[cfi].datatype == "DECIMAL"
			||  formObject.element[cfi].datatype == "MONEY" )
				textToEval = "document." + formObject.id + "." +
					formObject.element[cfi].id + ".value " +
					" = replaceComma(" +
					"document." + formObject.id + "." +
					formObject.element[cfi].id + ".value " +
					")";

			if( textToEval != "" ) eval( textToEval );
		}
	}

	return true;
}
