// Copyright TutorObjects 2002
// Auteur: Laurent Quivogne
var msg_date = "Date invalide (tapez au choix j/m/aaaa ou j/m ou jjmmaaaa ou jjmm): "; //GeC
var msg_heure = "Heure invalide (tapez au choix 15 ou 15h ou 15H00 ou 15:00): ";  
//var msg_duree = "Durée invalide (tapez au choix 1j, 1h, 1h15m, 15m ou 0h15m): ";  
var msg_duree = "Durée invalide ou nulle (tapez au choix 1h, 1h15m, 15m ou 0h15m): ";  //GeC
var msg_obligatoire = "Champ obligatoire: ";
var msg_type = "Type inconnu: ";
var msg_entier = "Valeur non entière: ";
var msg_numerique = "Valeur non numérique: ";
var msg_controleencours = "Contrôle de compatibilité en cours...";

function formatDate( inDate ){
	var out;
	var ss = inDate.split( '/' );
	
	if (ss.length == 1) //GeC: saisie sans slashes
	{
		if (ss[0].length > 0)
		{
			var jj = inDate.substr(0,2);
			var mm = inDate.substr(2,2);
			var aaaa =  inDate.substr(4);
			var slashed = jj;
			if (mm.length > 0)
			{
				slashed += '/' + mm;
			}
			if (aaaa.length > 0)
			{
				slashed += '/' + aaaa;
			}
			ss =  slashed.split( '/' );
		}
	}
	
	if( ss.length > 3 || ss.length < 2 ){
		throw "Date invalide";
	}
	var d = new Date();
	var a, m, j
	j = parseInt( ss[0], 10 );
	m = parseInt( ss[1], 10 );
	if( ss.length == 3 ){
		a = parseInt( ss[2], 10 );
	}else{
		a = d.getFullYear();
	}
	if( isNaN( j ) || isNaN( m ) || isNaN( a ) ){
		throw "Valeur non numérique";
	}
	if( a < 100 || a > 9999 ){
	//	a += 2000;
		throw "Date invalide";
	}
	d.setFullYear( a, (m - 1), j );
	if( d.getDate() != j || d.getMonth() != (m - 1)|| d.getFullYear() != a ){
		throw "Valeurs hors normes";
	}
	var sm, sj;
	sm = new String( m );
	sj = new String( j );
	if( sj.length == 1 ) sj = "0" + sj;
	if( sm.length == 1 ) sm = "0" + sm;
	out = sj + "/" + sm + "/" + a
	return out;
}

function formatHeure( inHeure ){
	var out, hh, mm, h, m;
	var re = /^([0-9]{1,2}) *([Hh:] *([0-9]{0,2}))?$/;
	if( !re.test( inHeure ) ){
		throw "Heure invalide";
	}
	h = parseInt( RegExp.$1, 10 );
	if( RegExp.$3 == "" ){
		m = 0;
	}else{
		m = parseInt( RegExp.$3, 10 );
	}
	if( h < 0 || h > 23 || m < 0 || m > 59 ){
		throw "Heure invalide";
	}
	mm = new String( m );
	if( mm.length == 1 ) mm = "0" + mm;
	hh = new String( h );
	if( hh.length == 1 ) hh = "0" + hh;
	out = hh + ":" + mm; 
	return out;
}

function parseDuree( inDuree ){
	var tab = new Array( 3 );
	// Suppression de la gestion des heures... (GeC: des jours ?)
	//var re = /^(([0-9]+) *[Jj])? *(([0-9]+) *[Hh])? *(([0-9]{1,2}) *([Mm][Nn]?))? *$/
	var re = /^(([0-9]+) *[Hh])? *(([0-9]{1,2}) *([Mm][Nn]?))? *$/
	if( !re.test( inDuree ) ){
		throw "Duree invalide";
	}
	tab[0] = 0;
	tab[1] = RegExp.$2 - 0;
	tab[2] = RegExp.$4 - 0;
	return tab;
}

function formatDuree( inDuree ){
	var out, tab;
	tab = parseDuree( inDuree );
	out = "";
	if( tab[0] != 0 ){
		out += tab[0] + "j ";
	}
	if( tab[1] != 0 ){
		out += tab[1] + "h ";
	}
	if( tab[2] != 0 || out == "" ){
		out += tab[2] + "mn ";
	}
	
	// 20/11/2006: test supprimé 
	//if (tab[0]+tab[1]+tab[2] == 0) { //GeC: durée nulle invalide
	//	throw "Duree invalide";
	//}
	
	return out;
}

function verifieEntier( entier ){
	var re = /^[0-9]*$/;
	return re.test( entier );
}

function verifieNumerique( num ){
	var re = /^([0-9]*)(,[0-9]*)?$/;
	//var str = num + " " + re.test( num );
	//str = str + " " + RegExp.$1 + " " + RegExp.$2;
	//alert( str );
	return re.test( num );
	
}

function verifieForme( forme ){
	var i, elt;
	for( i in field_control_array ){
		elt = field_control_array[i];
		var champ = forme.elements[elt[0]];
		
		if( champ != null ){
			if(champ.value == '' || (champ.tagName == 'SELECT' && champ.value == '0') || (elt[0] == 'SousSecteurActivite' && champ.value == '0')){ //GeC
				if( elt[2] == 'oui' ){
					alert( msg_obligatoire + elt[3]);
					if( champ.type != "hidden" ){
						champ.focus();
					}
					return false;
				}		
			}else{
				switch( elt[1] ){
				case 'date':
					try{
						champ.value = formatDate( champ.value );
					}catch(e){
						alert( msg_date + champ.value );
						champ.focus();
						return false;
					}
					break;
				case 'heure':
					try{
						champ.value = formatHeure( champ.value );
					}catch(e){
						alert( msg_heure + champ.value );
						champ.focus();
						return false;
					}
					break;
				case 'duree':
					try{
						champ.value = formatDuree( champ.value );
					}catch(e){
						alert( msg_duree + champ.value );
						champ.focus();
						return false;
					}
					break;
				case 'numerique':
					if( !verifieNumerique( champ.value ) ){
						alert( msg_numerique + champ.value );
						champ.focus();
						return false;
					}
					break;
				case 'entier':
					if( !verifieEntier( champ.value ) ){
						alert( msg_entier + champ.value );
						champ.focus();
						return false;
					}
					break;
				case 'booleen':
				case 'texte':
				case '':
					break;
				default:
					alert( msg_type + elt[1] );
					return false;
				}
			}
		}
	}
	return true;
}

function controleEnCours( forme ){
	var win;
	var W = 200;
	var H = 50;
	var X = ((screen.availWidth-W)/2);
	var Y= ((screen.availHeight-H)/2);
	win = window.open( 'controleencours.asp?msg=' + msg_controleencours, 'JungoControle', 'width=' + W + ',height=' + H + ', resizable=yes');
	win.moveTo(X,Y);
	win.focus();
	forme.target = 'JungoControle';
	forme.submit();
}

function fao( str ){
	var res = "", i, j = 0, k = 1;
	i = str.indexOf( "%" );
	if( i == -1 ){
		res = str;
	}else{	
		do{
			res += str.substring( j, i );
			switch( str.substring( (i + 1), (i + 2) ) ){
			case '':
			case '%':
				res += "%";
				break;
			case 's':
				if( arguments.length > k ){
					res += arguments[k];
					k++;
				}else{
					res += "?";
				}
				break;
			default:
				res += "?";
			}
			i += 2;
			j = i;
			i = str.indexOf( "%", i );
		}while( i != -1 );
		res += str.substring( j, str.length );
	}
	return res;
}

// Compare deux dates au format de l'application et retourne un nombre du signe de d1 - d2
function compareDate( d1, d2 ){
	var a1 = parseInt( d1.substring( 6, 10 ), 10 );
	var a2 = parseInt( d2.substring( 6, 10 ), 10 );
	if( a1 != a2 ) return a1 - a2;
	var m1 = parseInt( d1.substring( 3, 5 ), 10 );
	var m2 = parseInt( d2.substring( 3, 5 ), 10 );
	if( m1 != m2 ) return m1 - m2;
	return d1.substring( 0, 2 ) - d2.substring( 0, 2 );
}

// Compare deux durées au format de l'application et retourne un nombre du signe de d1 - d2
function compareDuree( d1, d2 ){
	var tab1 = parseDuree( d1 );
	var tab2 = parseDuree( d2 );
	return tab1[2] - tab2[2] + 60 * (tab1[1] - tab2[1] + 24 * (tab1[0] - tab2[0]));
}

// Formatte un nombre; dec indique le nombre de chiffres après la virgule
function formatNombre( nombre, dec ){
	var k = Math.pow( 10, dec );
	var re = /\./;
	var res = Math.round( nombre * k ) / k;
	return res.toString().replace( re, ',' );
}
