// Librairie de fonctions de vérification de formulaires

var verif_mess = "";

function verif_normalise_maj( s )
{
	s = s.replace( /^\s*/, "" );
	s = s.replace( /\s+/, " " );
	s = s.replace( /\s*$/, "" );
	
	s = s.replace( "é", "E" );
	s = s.replace( "è", "E" );
	s = s.replace( "à", "A" );
	s = s.replace( "ç", "C" );
	s = s.replace( "ù", "U" );
	s = s.replace( "ê", "e" );
	s = s.replace( "ë", "e" );
	s = s.replace( "ê", "e" );
	s = s.replace( "ï", "i" );
	s = s.replace( "â", "a" );
	s = s.replace( "ô", "o" );
	s = s.replace( "î", "i" );
				
	s = s.toUpperCase();
	return( s );
}

function verif_err( message )
{
	verif_mess = verif_mess + '\n * ' + message;
	return false;
}

function verif_aff_erreurs( message )
{
	if( verif_mess != "" )
	{
  	alert( message + verif_mess );
		verif_mess = "";
  	return false;
	}
 	return true;
}
 	
function verif_nonnul( obj, obj_type, message )
{
	if ( obj_type == "TEXTE" || obj_type == "MOT_DE_PASSE" )
	{
    	if( obj.value.length == 0 ) return( verif_err( message ) );
    	else return true;
	} else if ( obj_type == "SELECTION" ) {
		for( i=0; i < obj.length; i++ )
	   {
			if( obj.options[i].selected ) return true;
		}
      return( verif_err( message ) );	
	} else if ( obj_type == "UNI_RADIO" || obj_type == "UNI_CHECKBOX" ) {
		if( obj.checked ) return true;
		else return( verif_err( message ) );	
	} else if (obj_type == "RADIO" || obj_type == "CHECKBOX") {
		for (i=0; i < obj.length; i++)
	   {
			if( obj[i].checked ) return true;
		}
		return( verif_err( message ) );	
	}
}

function verif_select_obligatoire( obj, message )
{
	if( obj.options[ 0 ].selected ) return( verif_err( message ) );
   return true;
}
	
function verif_entier( obj, message )
{
	
	if( obj.value.length == 0 ) return true;
	
	var decimal_format = ".";
	var check_char;
	check_char = obj.value.indexOf( decimal_format )
   if( check_char < 1 ) return verif_numerique( obj, message );
   else return( verif_err( message ) );
}

function verif_intervalle( obj, minimum, maximum, message )
{
 	if( obj.value.length == 0 ) return( verif_err( message ) );

   if( verif_numerique( obj, message ) ) 
   {
		val = eval( obj.value );
		if( minimum != null && val < minimum ) return( verif_err( message ) );
		if( maximum != null && val > maximum ) return( verif_err( message ) );
	} else {
		return false;
	}
   return true;
}

function verif_numerique( obj, message )
{
 	if( obj.value.length == 0 ) return true;

	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;

	check_char = start_format.indexOf( obj.value.charAt( 0 ) )
	if( check_char == 1 ) decimal = true;
	else if( check_char < 1 ) return( verif_err( message ) );

	for( var i = 1; i < obj.value.length; i++ )
	{
		check_char = number_format.indexOf( obj.value.charAt( i ) )
		if( check_char < 0 )
		{
			return( verif_err( message ) );
		} else if( check_char == 1 ) {
			if( decimal ) return( verif_err( message ) );
			else decimal = true;
		} else if( check_char == 0 ) {
			if( decimal || digits ) trailing_blank = true;
		} else if( trailing_blank ) {
			return( verif_err( message ) );
		} else digits = true;
	}	
   return true
}

function verif_codechiffres( obj, longueur, message )
{
	var number_format = "0123456789";
	
	if( ! ( obj.value.length == longueur ) ) return( verif_err( message ) );

	for( var i = 1; i < obj.value.length; i++ )
	{
		if( number_format.indexOf( obj.value.charAt( i ) ) < 0 ) return( verif_err( message ) );
	}	
   return true
}

function verif_num_telephone( obj, message )
{
	var number_format = " ()0123456789";
	
	for( var i = 0; i < obj.value.length; i++ )
	{
		if( number_format.indexOf( obj.value.charAt( i ) ) < 0 ) return( verif_err( message ) );
	}	
   return true
}

function verif_nom_de_fichier( obj, message )
{
	var start_format = "abcdefghijklmnopqrstuvwxyz_";
	var suite_format = "0123456789abcdefghijklmnopqrstuvwxyz_";
	var fich;
	
 	if( obj.value.length == 0 ) return( verif_err( message ) );

	var fini = false;
	for( var i = obj.value.length - 4; i > 0 && ! fini; i-- )
	{
		if( obj.value.charAt( i ) == "/" || obj.value.charAt( i ) == "\\" ) fini = true;
	}

	fich = obj.value.slice( i + 2, obj.value.length - 4 );

	if( start_format.indexOf( fich.charAt( 0 ) ) < 0 ) return( verif_err( message ) );

	for( var i = 1; i < fich.length; i++ )
	{
		if( suite_format.indexOf( fich.charAt( i ) ) < 0 ) return( verif_err( message ) );
	}
		
   return true
}

function controle_other( champ_id, champ_lib, val_other, message )
{
   if( val_other != 0 && champ_lib.value.length == 0 && champ_id.value == val_other ) return( verif_err( message ) );
   return true
}

function verif_date( o_day, o_month, o_year, message )
{
	var maxDays;

	ret = verif_intervalle( o_day, 1, 31, message )
	if( ret ) ret = verif_intervalle( o_month, 1, 12, message )
	if( ret ) ret = verif_intervalle( o_year, 1900, 2030, message )
	
	if( ret )
	{
		month = parseInt( o_month.value );
		day = parseInt( o_day.value );
		year = parseInt( o_year.value );

  		switch( month )
  		{
   	case 2 : 
   		if ( ( year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0 ) ) maxDays = 29; 
   		else maxDays = 28;
   		break;
      case 1 : 
      case 3 : 
      case 5 : 
      case 7 : 
      case 8 : 
      case 10 : 
      case 12 :
      	maxDays = 31;
      	break;
      default : 
      	maxDays = 30;
      	break;
		}

 		if( day > maxDays ) ret = verif_err( message );
 	}
	
	return( ret );
}

function verif_mail( obj, message, oblig ) 
{
	ok = true;
	if( ok && ( obj.value.length == 0 ) && oblig ) ok = false;
	if( ok && ( obj.value.length > 0 ) ) 
	{
		var mailvalue = obj.value.toUpperCase();
		var comptevalue, dnsvalue, ipvalue;
		var nbpointdns = 0;

		TabRegistre = new Array ('.AERO','.BIZ','.COM','.COOP','.INFO','.MUSEUM','.NAME','.COM','.EDU','.GOV',
		'.INT','.MIL','.NET','.ORG','.AC','.AD','.AE','.AF','.AG','.AI','.AL','.AM','.AN','.AO','.AQ','.AR','.AS',
		'.AT','.AU','.AW','.AZ','.BA','.BB','.BD','.BE','.BF','.BG','.BH','.BI','.BJ','.BM','.BN','.BO','.BR',
		'.BS','.BT','.BV','.BW','.BY','.BZ','.CA','.CC','.CD','.CF','.CG','.CH','.CI','.CK','.CL','.CM','.CN',
		'.CO','.CR','.CS','.CU','.CV','.CX','.CY','.CZ','.DE','.DJ','.DK','.DM','.DO','.DZ','.EC','.EE','.EG',
		'.EH','.ER','.ES','.ET','.FI','.FJ','.FK','.FM','.FO','.FR','.GA','.GB','.GD','.GE','.GF','.GG','.GH',
		'.GI','.GL','.GM','.GN','.GP','.GQ','.GR','.GS','.GT','.GU','.GW','.GY','.HK','.HM','.HN','.HR','.HT',
		'.HU','.ID','.IE','.IL','.IM','.IN','.IO','.IQ','.IR','.IS','.IT','.JE','.JM','.JO','.JP','.KE','.KG',
		'.KH','.KI','.KM','.KN','.KP','.KR','.KW','.KY','.KZ','.LA','.LB','.LC','.LI','.LK','.LR','.LS','.LT',
		'.LU','.LV','.LY','.MA','.MC','.MD','.MG','.MH','.MK','.ML','.MM','.MN','.MO','.MP','.MQ','.MR','.MS',
		'.MT','.MU','.MV','.MW','.MX','.MY','.MZ','.NA','.NC','.NE','.NF','.NG','.NI','.NL','.NO','.NP','.NR',
		'.NU','.NZ','.OM','.PA','.PE','.PF','.PG','.PH','.PK','.PL','.PM','.PN','.PR','.PS','.PT','.PW','.PY',
		'.QA','.RE','.RO','.RU','.RW','.SA','.SB','.SC','.SD','.SE','.SG','.SH','.SI','.SJ','.SK','.SL','.SM',
		'.SN','.SO','.SR','.ST','.SU','.SV','.SY','.SZ','.TC','.TD','.TF','.TG','.TH','.TJ','.TK','.TM','.TN',
		'.TO','.TP','.TR','.TT','.TV','.TW','.TZ','.UA','.UG','.UK','.UM','.US','.UY','.UZ','.VA','.VC','.VE',
		'.VG','.VI','.VN','.VU','.WF','.WS','.YE','.YT','.YU','.ZA','.ZM','.ZR','.ZW' );
		TabError = new Array( '.@', '.@.', '@.', ' ', '/', '\\', '..' );
	
		if( ok && ( mailvalue.indexOf('@') == -1 || mailvalue.indexOf( '.' ) == -1 ) ) ok = false;
		if( ok && mailvalue.charAt( mailvalue.length-1 ) != ']' )
		{
			ok = false;
			for( var i = 0; i < TabRegistre.length; i++ )
			{
				if( mailvalue.substr( mailvalue.length - TabRegistre[ i ].length, TabRegistre[ i ].length ) == TabRegistre[ i ] ) ok = true;		
			}
		}
			
		if( ok && mailvalue.indexOf( '@' ) == 0 ) ok = false;					
		if( ok && mailvalue.indexOf( '@' ) != mailvalue.lastIndexOf( '@' ) ) ok = false;		
		if( ok ) for( var i = 0; i <= TabError.length; i++) { if( mailvalue.indexOf( TabError[ i ] ) != -1 ) ok = false; }	
		if( ok ) 
		{
			for( var i = 0; i < mailvalue.length; i++ ) 
			{
				if( mailvalue.charCodeAt( i ) <= 44 || mailvalue.charCodeAt( i ) >= 96 ) { ok = false; break; }
				if( mailvalue.charCodeAt( i ) >= 58 && mailvalue.charCodeAt( i ) <= 63 ) { ok = false; break; }										
				if( mailvalue.charCodeAt( i ) == 47 || mailvalue.charCodeAt( i ) == 92 || mailvalue.charCodeAt( i ) == 94 ) { ok = false; break; }	
			}	
		}
		
		if( ok ) 
		{
			comptevalue = mailvalue.substr( 0, mailvalue.indexOf( '@' ) );
			if( comptevalue.indexOf( '[' ) != -1 || comptevalue.indexOf( ']' ) != -1) ok = false;
		}
	
		if( ok ) 
		{
			dnsvalue = mailvalue.substr( mailvalue.indexOf( '@' ) + 1, mailvalue.length - mailvalue.indexOf( '@' ) );								
			if( dnsvalue.charAt(0) == '[' && dnsvalue.charAt( dnsvalue.length - 1 ) == ']' )
			{
				ipvalue = dnsvalue.substring( 1, dnsvalue.length - 1 );
				nbpointdns = 0;
				for( var i = 0; i < ipvalue.length; i++ )
				{
					if( ipvalue.charAt( i ) == '.' ) nbpointdns++;
					else if( ipvalue.charCodeAt( i ) < 48 || ipvalue.charCodeAt( i ) >= 57  ) { ok = false; break; }
				}					
				domainvalue = ipvalue.split( '.' );
				for( var i = 0; i < domainvalue.length; i++ ) { if( parseInt( domainvalue[i] ) > 255 ) { ok = false; break; } }										
				if( nbpointdns != 3 ) ok = false;						
			} 
			else if( dnsvalue.indexOf( '[' ) != -1 || dnsvalue.indexOf( ']' ) != -1 ) ok = false;
		}
	}
	
  return( ( ok ) ? true : verif_err( message ) )
}