// Librairie de fonctions de vérification de formulaires

function verif_err( message, obj ) { alert( message ); obj.focus(); return false }

function verif_entier( n_obj, message, oblig )
{
	var ok = ( obj = verif_findObj( n_obj ) ); obj.value = supp_trail_blancs( obj.value );
	if( ok && ( obj.value.length == 0 ) && oblig ) ok = false;
	if( ok && ( obj.value.length > 0 ) ) 
	{
		var trouve = ( obj.value.indexOf( '.' ) > 0 ) || ( obj.value.indexOf( ',' ) > 0 );
	  return( ( ! trouve ) ? verif_numerique( n_obj, message, oblig ) : verif_err( message, obj ) )
	}
	return( ( ok ) ? true : verif_err( message, obj ) )
}

function verif_num_telephone( n_obj, message, oblig )
{
	var ok = ( obj = verif_findObj( n_obj ) ); obj.value = supp_trail_blancs( obj.value );
	if( ok && ( obj.value.length == 0 ) && oblig ) ok = false;
	if( ok && ( obj.value.length > 0 ) ) 
	{
		var fmt = " ()0123456789";
		for( var i = 0; ok && ( i < obj.value.length ); i++ ) ok = ( fmt.indexOf( obj.value.charAt( i ) ) >= 0 );
  }
  return( ( ok ) ? true : verif_err( message, obj ) )
}

function verif_select_obligatoire( n_obj, message )
{
	var ok = ( obj = verif_findObj( n_obj ) )
	if( obj = verif_findObj( n_obj ) )
	{
		if( obj.options[ 0 ].selected ) return( verif_err( message, obj ) );
  		return true;
  }
}

function verif_intervalle( n_obj, minimum, maximum, message, oblig )
{
	var ok = ( obj = verif_findObj( n_obj ) ); obj.value = supp_trail_blancs( obj.value );
	if( ok && ( obj.value.length == 0 ) && oblig ) ok = false;
	if( ok && ( obj.value.length > 0 ) ) 
	{
		if( verif_numerique( n_obj, message ) ) 
  	{
			val = eval( obj.value.replace( ",", "." ) );
			if( ! val ) val = 0;
			if( minimum != null ) ok = ( val >= minimum );
			if( ok && maximum != null ) ok = ( val <= maximum );
		} else return false;
	}
  return( ( ok ) ? true : verif_err( message, obj ) )
}

function verif_numerique( n_obj, message, oblig )
{
	var ok = ( obj = verif_findObj( n_obj ) ); obj.value = supp_trail_blancs( obj.value );
	if( ok && ( obj.value.length == 0 ) && oblig ) ok = false;
	if( ok && ( obj.value.length > 0 ) ) 
	{
		var start_format = " .,+-0123456789";
		var number_format = " .,0123456789";
		var check_char;
		var decimal = false;
		var trailing_blank = false;
		var res = "";

		check_char = start_format.indexOf( obj.value.charAt( 0 ) )
		if( check_char == 1 ) decimal = true;
		else if( check_char < 1 ) ok = false;
		if( ok && check_char != 0 ) res = res + obj.value.charAt( 0 );

		for( var i = 1; ok && ( i < obj.value.length ); i++ )
		{
			check_char = number_format.indexOf( obj.value.charAt( i ) )
			if( check_char < 0 ) ok = false;
			else if( check_char == 1 ) { if( decimal ) ok = false; else decimal = true; } 
			else if( check_char == 2 ) { if( decimal ) ok = false; else decimal = true; } 
			else if( check_char == 0 ) trailing_blank = true;

			if( ! trailing_blank ) res = res + obj.value.charAt( i );
			trailing_blank = false;
		}
		obj.value = res;
	}
  return( ( ok ) ? true : verif_err( message, obj ) )
}

function verif_nonnul( n_obj, obj_type, message )
{
	var ok = ( obj = verif_findObj( n_obj ) ); 
	if( ok && ( obj_type == "TEXTE" || obj_type == "MOT_DE_PASSE" ) && obj.value.length == 0 ) ok = false
	if( ok && obj_type == "SELECTION" ) {
		ok = false;
		for( i=0; i < obj.length; i++ ) if( obj.options[i].selected ) ok = true;
	}
	if( ok && ( obj_type == "UNI_RADIO" || obj_type == "UNI_CHECKBOX" ) ) ok = ! obj.checked;
	if( ok && ( obj_type == "RADIO" || obj_type == "CHECKBOX" ) ) {
		ok = false;
		for (i=0; i < obj.length; i++) if( obj[i].checked ) ok = true;
	}
  return( ( ok ) ? true : verif_err( message, obj ) )	
}

function verif_mail( n_obj, message, oblig ) 
{
	var ok = ( obj = verif_findObj( n_obj ) ); obj.value = supp_trail_blancs( obj.value );
	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','.EU','.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], 10 ) > 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, obj ) )
}


function verif_codechiffres( n_obj, longueur, oblig )
{
	var ok = ( obj = verif_findObj( n_obj ) ); obj.value = supp_trail_blancs( obj.value );
	if( ok && ( obj.value.length == 0 ) && oblig ) ok = false;
	if( ok && ( obj.value.length > 0 ) ) {
		var number_format = "0123456789";
		if( ! ( obj.value.length == longueur ) ) ok = false;

		if( ok ) for( var i = 1; ok && ( i < obj.value.length ); i++ ) {
				if( number_format.indexOf( obj.value.charAt( i ) ) < 0 ) ok = false;
		}
	}
	
  return( ( ok ) ? true : verif_err( message, obj ) )
}

function verif_nom_de_fichier( n_obj, message )
{
	var ok = ( obj = verif_findObj( n_obj ) ); obj.value = supp_trail_blancs( obj.value );
	var start_format = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_";
	var suite_format = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_ ";
	var fich;
	
 	if( obj.value.length == 0 ) return( verif_err( message, obj ) );

	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, obj ) );

	for( var i = 1; i < fich.length; i++ )
	{
		if( suite_format.indexOf( fich.charAt( i ) ) < 0 ) return( verif_err( message, obj ) );
	}
		
   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, obj ) );
   return true
}

function verif_date( o_day, o_month, o_year, message, oblig )
{
	var maxDays;

	ret = verif_intervalle( o_day, 1, 31, message, oblig )
	if( ret ) ret = verif_intervalle( o_month, 1, 12, message, oblig )
	if( ret ) ret = verif_intervalle( o_year, 1900, 2030, message, oblig )

	if( ret ) var ret = ( obj_day = verif_findObj( o_day ) );
	if( ret ) var ret = ( obj_month = verif_findObj( o_month ) );	
	if( ret ) var ret = ( obj_year = verif_findObj( o_year ) );

	if( ret )
	{
		month = parseInt( obj_month.value, 10 );
		day = parseInt( obj_day.value, 10 );
		year = parseInt( obj_year.value, 10 );

  		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 + ' obj_month.value=' + obj_month.value + ' m=' + month + ' md=' + maxDays + ' d=' + day, obj );
 	}
	
	return( ret );
}

function verif_normalise_maj( n, d )
{
	o = verif_findObj( n, d );
	s = o.value;
	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();
	o.value = s;
	return( s );
}

// FONCTIONS UTILITAIRES

function verif_findObj( n, d )
{
 	var p, i, x;  
 	if( ! d ) d = document; 
 	if( ( p = n.indexOf( "?" ) ) > 0 && parent.frames.length )
 	{
    	d = parent.frames[ n.substring( p+1 ) ].document; 
    	n = n.substring( 0, p );
 	}
  if( ! ( x = d[n] ) && d.all ) x = d.all[n];
  for( i = 0; ! x && i < d.forms.length; i++ ) x = d.forms[i][n];
  for( i = 0; ! x && d.layers && i < d.layers.length; i++ ) x = aff_findObj( n, d.layers[i].document);
  if( !x && d.getElementById ) x = d.getElementById( n ); 
  return x;
}

function supp_trail_blancs( chaine )
{
	var i = 0; ch2 = "";
	while( i < chaine.length && chaine.charAt( i ) == " " ) i++;
	while( i < chaine.length ) { ch2 = ch2 + chaine.charAt( i ); i++ }
	return( ch2 )	
}