// -------------------------------------------------------------------------------
// librairie pour les formulaires de saisie
// -------------------------------------------------------------------------------

//n'autorise que la saisie des nombres flotants

function forceFloatValue( event ){
				
	var keynum;
	
	if( window.event ) // IE
		keynum = window.event.keyCode;
	else if( event.which ) // Netscape/Firefox/Opera
		keynum = event.which;
	else return true;

	if( keynum == 8 ) //backspace
		return true;
			
	var keychar = String.fromCharCode( keynum );
	
	//In XML, a single backslash is taken literally and becomes a real backslash character in the String. In JavaScript, backslash means quote the next character, and a double backslash is required to create a real backslash character in the String
	
	var pattern = '^[0-9,\\.\\-\\+]{1}$';
	var reg = new RegExp( pattern, 'g' );

	if( !reg.test( keychar ) )
		return false;

	return true;
	
}

// -------------------------------------------------------------------------------

//n'autorise que la saisie des nombres flotants non signés

function forceUnsignedFloatValue( event ){
				
	var keynum;
	
	if( window.event ) // IE
		keynum = window.event.keyCode;
	else if( event.which ) // Netscape/Firefox/Opera
		keynum = event.which;
	else return true;

	if( keynum == 8 ) //backspace
		return true;
			
	var keychar = String.fromCharCode( keynum );
	
	//In XML, a single backslash is taken literally and becomes a real backslash character in the String. In JavaScript, backslash means quote the next character, and a double backslash is required to create a real backslash character in the String
	
	var pattern = '^[0-9,\\.]{1}$';
	var reg = new RegExp( pattern, 'g' );

	if( !reg.test( keychar ) )
		return false;

	return true;
	
}

// -------------------------------------------------------------------------------

//n'autorise la saisie que des nombres entiers

function forceIntegerValue( event ){
				
	var keynum;
	
	if( window.event ) // IE
		keynum = window.event.keyCode;
	else if( event.which ) // Netscape/Firefox/Opera
		keynum = event.which;
	else return true;

	if( keynum == 8 ) //backspace
		return true;
			
	var keychar = String.fromCharCode( keynum );
	
	//In XML, a single backslash is taken literally and becomes a real backslash character in the String. In JavaScript, backslash means quote the next character, and a double backslash is required to create a real backslash character in the String
	
	var pattern = '^[0-9\\-\\+]{1}$';
	var reg = new RegExp( pattern, 'g' );

	if( !reg.test( keychar ) )
		return false;

	return true;
	
}

// -------------------------------------------------------------------------------

//n'autorise la saisie que des nombres entiers non signés

function forceUnsignedIntegerValue( event ){
				
	var keynum;
	
	if( window.event ) // IE
		keynum = window.event.keyCode;
	else if( event.which ) // Netscape/Firefox/Opera
		keynum = event.which;
	else return true;

	if( keynum == 8 ) //backspace
		return true;
			
	var keychar = String.fromCharCode( keynum );
	
	var pattern = '^[0-9]{1}$';
	var reg = new RegExp( pattern, 'g' );

	if( !reg.test( keychar ) )
		return false;

	return true;
	
}

// -------------------------------------------------------------------------------

//n'autorise la saisie que des caractères alphanumériques

function forceAlphaNumericValue( event ){
				
	var keynum;
	
	if( window.event ) // IE
		keynum = window.event.keyCode;
	else if( event.which ) // Netscape/Firefox/Opera
		keynum = event.which;
	else return true;

	if( keynum == 8 ) //backspace
		return true;
			
	var keychar = String.fromCharCode( keynum );
	
	var pattern = '^[0-9a-zA-Z]{1}$';
	var reg = new RegExp( pattern, 'g' );

	if( !reg.test( keychar ) )
		return false;

	return true;
	
}

// -------------------------------------------------------------------------------

//n'autorise que la saisie des dates au format %d-%m-%y

function forceDateFormat( event ){
				
	var keynum;
	
	if( window.event ) // IE
		keynum = window.event.keyCode;
	else if( event.which ) // Netscape/Firefox/Opera
		keynum = event.which;
	else return true;

	if( keynum == 8 ) //backspace
		return true;
			
	var keychar = String.fromCharCode( keynum );
	
	var pattern = '^[0-9\-]{1}$';
	var reg = new RegExp( pattern, 'g' );

	if( !reg.test( keychar ) )
		return false;
		
	return true;
	
}

// -------------------------------------------------------------------------------

//n'autorise la saisie que des caractères alphabétique

function forceAlphaValue( event ){
				
	var keynum;
	
	if( window.event ) // IE
		keynum = window.event.keyCode;
	else if( event.which ) // Netscape/Firefox/Opera
		keynum = event.which;
	else return true;

	if( keynum == 8 ) //backspace
		return true;
			
	var keychar = String.fromCharCode( keynum );
	
	var pattern = '^[a-zA-Z]{1}$';
	var reg = new RegExp( pattern, 'g' );

	if( !reg.test( keychar ) )
		return false;

	return true;
	
}

// -------------------------------------------------------------------------------

//return true si un champ obligatoire donné est bien renseigné
	
function isFilled( element ){

	switch( element.tagName.toLowerCase() ){
				
		case 'input' :
			
			if( element.value == null )
				return false;
				
			var type = element.getAttribute( 'type' );
			
			if( type == null )
				return false;
			
			switch( type ){
			
				case 'button' :
				case 'submit' :
				case 'reset' :
				case 'password' :
				case 'text' : 
				case 'hidden' :
				case 'file' :
				case 'image' : return element.value != '';
				case 'checkbox' :
				case 'radio' : return element.checked == 'checked';
				
				default : return false;
				
			}

			break;
			
		case 'select' :
		
			var selectedIndex 	= element.selectedIndex;
			
			if( selectedIndex == null )
				return false;
				
			if( element.getAttribute( 'multiple' ) == null || element.getAttribute( 'multiple' ) == false ){
			
				var selectedValue = element.options[ element.selectedIndex ].value;
				
				if( selectedValue != '' )
					return true;
				
				return false;
					
			}
			else{
			
				var selectedIndexes = element.selectedIndex;
				
				var i = 0;
				while( i < selectedIndexes.length ){
				
					var selectedIndex = selectedIndexes[ i ];
					
					if( element.option[ selectedIndex ].value != '' )
						return true;
						
					i++;
					
				}

				return false;
				
			}
				
			break;
		
		case 'textarea' : return element.innerHTML != '';
			
		default : return false;
	
	}

}

// -------------------------------------------------------------------------------

//return true si un champ obligatoire donné n'est pas renseigné ou que la valeur renseignée est 0 ou ""
	
function isEmpty( element ){

	switch( element.tagName.toLowerCase() ){
				
		case 'input' :
			
			if( element.value == null )
				return true;
				
			var type = element.getAttribute( 'type' );
			
			if( type == null )
				return true;
			
			switch( type ){
			
				case 'button' :
				case 'submit' :
				case 'reset' :
				case 'password' :
				case 'text' : 
				case 'hidden' :
				case 'file' :
				case 'image' : return element.value == '' || element.value == '0';
				case 'checkbox' :
				case 'radio' : return element.checked != 'checked';
				
				default : return true;
				
			}

			break;
			
		case 'select' :
		
			var selectedIndex 	= element.selectedIndex;
			
			if( selectedIndex == null )
				return true;
				
			if( element.getAttribute( 'multiple' ) == null || element.getAttribute( 'multiple' ) == false ){
			
				var selectedValue = element.options[ element.selectedIndex ].value;
				
				if( selectedValue != '' && selectedValue != '0' )
					return false;
				
				return true;
					
			}
			else{
			
				var selectedIndexes = element.selectedIndex;
				
				var i = 0;
				while( i < selectedIndexes.length ){
				
					var selectedIndex = selectedIndexes[ i ];
					
					if( element.option[ selectedIndex ].value != '' && element.option[ selectedIndex ].value != '0' )
						return false;
						
					i++;
					
				}

				return true;
				
			}
				
			break;
		
		case 'textarea' : return element.innerHTML == '';
			
		default : return true;
	
	}

}

// -------------------------------------------------------------------------------

//donne une valeur donnée à un champ donné d'un formulaire donné
//@todo : ne gère pas les champs à sélection multiples

function resetFormElementValue( formName, elementName, value ){

	var form = document.forms[ formName ];
	
	if( form == null )
		return;
		
	var element = form.elements[ elementName ];

	if( element instanceof NodeList )
		return;
		
	if( element == null || element.tagName == null )
		return;
		
	switch( element.tagName.toLowerCase() ){
				
		case 'input' :

			var type = element.getAttribute( 'type' );
			
			if( type == null || element.getAttribute( 'value' ) == null )
				return;
			
			switch( type ){
			
				case 'button' :
				case 'submit' :
				case 'reset' :
				case 'password' :
				case 'file' :
				case 'image' : 
				case 'hidden' :
				
					return;
				
				case 'text' :	
					
					if( isArray( value ) ){
					
						var i = 0;
						while( i < element.length ){
						
							element[ i ].value = value[ i ];
							i++;
							
						}
					
					}
					else element.value = value;
					
					return;
					
				case 'checkbox' :
				case 'radio' :
				
					if( element.length ){
					
						var i = 0;
						var done = false;
						while( !done && i < element.length ){
						
							if( element[ i ].value = value ){
							
								element.checked = true;
								done = true;
								
							}
							
							i++;
						
						}
	
					}
					else if( element.value == value )
						element.checked = true;
					
					break;

				default : return;
				
			}

			break;
			
		case 'select' :
		
			var options = element.options;
			
			if( options == null || !options.length )
				return;
			
			var i = 0;
			var done = false;
			while( !done && i < options.length ){
			
				if( options[ i ].value == value ){
				
					element.selectedIndex = i;
					done = true;
					
				}
					
				i++;
				
			}
	
			break;
		
		case 'textarea' : 
		
			if( element.length && isArray( value ) ){
					
				var i = 0;
				while( i < element.length ){
				
					element[ i ].innerHTML = value[ i ];
					i++;
					
				}
			
			}
			else element.innerHTML = value;
			
		default : return;
	
	}
	
}

// -------------------------------------------------------------------------------

//donne une valeur donnée à un élément d'une collection donnée d'un formulaire donné
//@todo : ne gère pas les champs à sélection multiples

function resetFormCollectionValue( formName, nodeList, values ){

	var form = document.forms[ formName ];
	
	if( form == null )
		return;
	
	var nodeList = form.elements[ nodeList ];

	if( !nodeList || !values || !( nodeList instanceof NodeList ) || !isArray( values ) )
		return;
		
	if( nodeList.length != values.length )
		return;
	
	var i = 0;
	while( i < nodeList.length ){
	
		var element = nodeList[ i ];
		var value 	= values[ i ];

		switch( element.tagName.toLowerCase() ){
					
			case 'input' :
	
				var type = element.getAttribute( 'type' );
				
				if( type == null || element.getAttribute( 'value' ) == null )
					return;
				
				switch( type ){
				
					case 'button' :
					case 'submit' :
					case 'reset' :
					case 'password' :
					case 'file' :
					case 'image' : 
					case 'hidden' :
					
						break;
					
					case 'text' :	
					
						element.value = value;
	
						break;
						
					case 'checkbox' :
					case 'radio' :
					
						if( element.value == value )
							element.checked = true;
						
						break;
	
					default : return;
					
				}
	
				break;
				
			case 'select' :
			
				var options = element.options;
				
				if( options == null || !options.length )
					return;
				
				var j = 0;
				var done = false;
				while( !done && j < options.length ){
				
					if( options[ j ].value == value ){
					
						element.selectedIndex = j;
						done = true;
						
					}
						
					j++;
					
				}
		
				break;
			
			case 'textarea' : 
			
				element.innerHTML = value;
				
			default : return;
		
		}
	
		i++;
		
	}
}

// -------------------------------------------------------------------------------

function isArray( element ){

	return element && element.constructor && element.constructor == Array;
	
}

// -------------------------------------------------------------------------------
