//Projet IMMO – MAI 2001
//IMMO
//(c) 2001 – Tous droits réservés. Reproduction strictement interdite.
function ouvrir(desti,largeur,hauteur,scrollbars) {
// ouvre un pop up sur la page desti de largeur larg et hauteur haut, dans une fenetre nom
	window.open(desti,"popup","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars="+scrollbars+",resizeable=no,height="+hauteur+",width="+largeur);

}


<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}
//-->



/*---------------------------------------------------------------------
' Routine         verifChampObl
' But             Verifie qu'un champ est saisi
'
' Appelée par    .
' Entrées        champ    : objet champ
'                lblChamp  : Libellé du champ
'
' Sortie        .
' Historique    24/11/2000 AC Création
'               
'---------------------------------------------------------------------*/
function verifChampObl(champ, lblChamp){
	if (champ.value == "" ) {
		alert("Le champ '" + lblChamp + "' est obligatoire");
		champ.focus();
		return false;
	} else {
	  return true;
	}
}

/*---------------------------------------------------------------------
' Routine         FmtMsg
' But             Formate le message d'erreur
'
' Appelée par    .
' Entrées        MsgStr    : message
'                Args  : Arguments
'
' Sortie        .
' Historique    12/01/2000 AC Création
'               
'---------------------------------------------------------------------*/

VarMonNames=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
VarMonDays=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
VarAlpha='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
VarDigit='0123456789';
VarWhite=' \t\r\f\n';
VarMaskNames=new Array('digit','alphabetic','non-blank','space');

function FmtMsg (MsgStr, Args)
{
	var i, c, Start;
	var OutStr = "";			// Where we're formatting to...
	for (i=0; i < MsgStr.length; i++)  
	{
		c = MsgStr.charAt (i);
		if ((c == '%') && (i < (MsgStr.length-1)))
		{
			i++;   c = MsgStr.charAt(i);
			if ((c == '%') || (VarDigit.indexOf(c, 0) == -1))
				OutStr += '%';
			else
			{	// Looks like a fmt subst spec. narf off digits
				Start = i++;
				while (i < MsgStr.length)
				{	// Scan until we hit a nondigit
					c = MsgStr.charAt(i);
					if (VarDigit.indexOf(c, 0) == -1)
					{
						i--;	break;
					}
					i++;
				}
				Start = parseInt(MsgStr.substring(Start, i+1));
				if (Start < FmtMsg.arguments.length)
				{
					OutStr += FmtMsg.arguments[Start];
				}
				// otherwise leave it empty
			}
		}
		else
			OutStr += c;
	}
	return OutStr;
}

/*---------------------------------------------------------------------
' Routine         ValNumInt
' But             Verifie qu'un champ saisi est une valeur entière et
'                 qu'il est compris dans des bornes optionnelles
'
' Appelée par    .
' Entrées        .
'
' Sortie        .
' Historique    12/01/2000 AC Création
'               
'---------------------------------------------------------------------*/
MsgMustBeNum="Le champ '%1' doit être une valeur numérique.";
MsgMustBeInt="Le champ '%1' doit être un entier.";
MsgGTMin="Le champ '%1' doit être supérieur à %2.";
MsgGEMin="Le champ '%1' doit être supérieur ou égal à %2.";
MsgLTMax="Le champ '%1' doit être inférieur à %2.";
MsgLEMax="Le champ '%1' doit être inférieur ou égal à %2.";
// Non traduit !
MsgSignLeftmost='Warning: sign must be leftmost nonblank character in number, preceding at least one digit; please correct field %1.';
MsgGrpDecPt='Warning: %1 has multiple decimal points or digit grouping character after decimal point';
MsgGrp3Dig='Invalid digit grouping in number field %1; `%2` must separate three-digit sequences to the left of the decimal point.';

function ValNumInt (formName, formField, formFieldName, minOp, minVal, maxOp, maxVal, grpChars)
{
	var failed = false;
	var bSawDigit = false;
	var s = formName.elements[formField.name].value;
	var grpPos = -1;
	var i, lf, rt, res;
	for(lf=0;(lf < s.length) && (s.charAt(lf)==' '); lf++);
	if (lf == s.length) return true;		// empty
	for(rt=s.length-1;s.charAt(rt) == ' '; rt--);
	res = '';		// Collect int w/o grping
	grpPos = rt+1;	// Three digits to right of last grouper; so init grouptest here
	for (i = rt; i >= lf ; i--)	// right to left scan
	{
		if ((VarDigit.indexOf(s.charAt(i)) == -1)
			&& ((grpChars == '') || (s.charAt(i) != grpChars.charAt(0))))
		{
			if ((s.charAt(i) == '-') || (s.charAt(i) == '+'))	// Sign
			{
				if (bSawDigit && (i == lf))
				{	// Valid sign - leftmost, at least one digit
					res = s.charAt(i) + res;
					break;
				}
				alert (FmtMsg(MsgSignLeftmost, formFieldName));
			}
			else
				alert (FmtMsg(MsgMustBeInt, formFieldName));
			failed = true;
			break;
		}
		else if ((grpChars != '') && s.charAt(i) == grpChars.charAt(0))	// grouper
		{
			if ((grpPos >= 0) && ((grpPos - i) != 4))
			{
				alert (FmtMsg(MsgGrp3Dig, formFieldName, grpChars.charAt(0)));
				failed = true;
				break;
			}
			grpPos = i;
		}
		else
		{
			res = s.charAt(i) + res;
			bSawDigit = true;
		}
	} // end for
	// Test min/max
	if ( (!failed) && bSawDigit && ((minVal != '') || (maxVal != '')) )
	{
		i = parseInt (res);
		if (isNaN(i))
		{
			alert (FmtMsg(MsgMustBeInt, formFieldName));
			failed = true;
		}
		else
		{
			 if (minVal != '')
			 {
			 	if ((minOp == 'GE') && (i < minVal))
			 	{
					alert (FmtMsg(MsgGEMin, formFieldName, minVal));  failed = true;
			 	}
			 	else if ((minOp == 'GT') && (i <= minVal))
			 	{
					alert (FmtMsg(MsgGTMin, formFieldName, minVal));  failed = true;
			 	}
			 }
			 if ((!failed) && (maxVal != ''))
			 {
			 	if ((maxOp == 'LE') && (i > maxVal))
			 	{
					alert (FmtMsg(MsgLEMax, formFieldName, maxVal));  failed = true;
			 	}
			 	else if ((maxOp == 'LT') && (i >= maxVal))
			 	{
					alert (FmtMsg(MsgLTMax, formFieldName, maxVal));  failed = true;
			 	}
			}
		}
	}
	if (failed)
	{
	   formName.elements[formField.name].focus();
	}
	return !failed;
}


/*---------------------------------------------------------------------
' Routine         ValNumDec
' But             Verifie qu'un champ saisi est une valeur décimale et
'                 qu'il est compris dans des bornes optionnelles
'
' Appelée par    .
' Entrées        .
'
' Sortie        .
' Historique    12/01/2000 AC Création
'               
'---------------------------------------------------------------------*/

function ValNumDec (formName, formField, formFieldName, minOp, minVal, maxOp, maxVal, grpChars)
{
	var failed = false;
	var rtDigit = -1;
	var decPos = -1;
	var grpPos = -1;
	var s = formName.elements[formField.name].value;
	var i,j,lf,rt,res,decChar;

	decChar = (grpChars.length >= 2) ? grpChars.charAt(1) : '.';

	for(lf=0;(lf < s.length) && (s.charAt(lf)==' '); lf++);
	if (lf == s.length) return true;		// empty
	for(rt=s.length-1;s.charAt(rt) == ' '; rt--);
	res='';
	for (i = rt; i >= lf ; i--)	// right to left scan
	{
		if ((VarDigit.indexOf(s.charAt(i)) == -1)
			&& (s.charAt(i) != decChar)
			&& ((grpChars == '') || (s.charAt(i) != grpChars.charAt(0))))
		{
			if ((s.charAt(i) == '-') || (s.charAt(i) == '+'))	// Sign
			{
				if ((rtDigit != -1) && (i == lf))
				{
					res = s.charAt(i) + res;
					break;
				}
				alert (FmtMsg(MsgSignLeftmost, formFieldName));
			}
			else // Not sign, not grp, not decpt
				alert (FmtMsg(MsgMustBeNum, formFieldName));
			failed = true;
			break;
		}
		else if (s.charAt(i) == decChar)	// dec pt
		{
			if ((decPos >= 0) || ((grpPos > 0) && (grpChars.charAt(0) != decChar)))	// 2nd decimal, or comes left of group
			{
				alert (FmtMsg(MsgGrpDecPt, formFieldName));
				failed = true;
				break;
			}
			else
			{
				res = '.' + res;		// Javascript doesn't do int'l dec pt yet
				decPos = i;
			}
		}
		else if (s.charAt(i) == grpChars.charAt(0))	// grouper
		{
			j = (grpPos >= 0) ? grpPos : decPos;
			if (j < 0) j = rtDigit + 1;
			if ((j < 0) ||  ((j >= 0) && ((j - i) != 4)))
			{
				alert (FmtMsg(MsgGrp3Dig, formFieldName, grpChars.charAt(0)));
				failed = true;
				break;
			}
			grpPos = i;
		}
		else
		{
			res = s.charAt(i) + res;
			if (rtDigit == -1) rtDigit = i;
		}
	} // end for
	//
	// Test min/max
	//
	if ( (!failed) && (rtDigit > -1) && ((minVal != "") || (maxVal != "")) )
	{
		i = parseFloat (res);
		if (isNaN(i))
		{
			alert (FmtMsg(MsgMustBeNum, formFieldName));
			failed = true;
		}
		else
		{
			 if (minVal != '')
			 {
			 	if ((minOp == 'GE') && (i < minVal))
			 	{
					alert (FmtMsg(MsgGEMin, formFieldName, minVal));  failed = true;
			 	}
			 	else if ((minOp == 'GT') && (i <= minVal))
			 	{
					alert (FmtMsg(MsgGTMin, formFieldName, minVal));  failed = true;
			 	}
			 }
			 if ((!failed) && (maxVal != ""))
			 {
			 	if ((maxOp == 'LE') && (i > maxVal))
			 	{
					alert (FmtMsg(MsgLEMax, formFieldName, maxVal));  failed = true;
			 	}
			 	else if ((maxOp == 'LT') && (i >= maxVal))
			 	{
					alert (FmtMsg(MsgLTMax, formFieldName, maxVal));  failed = true;
			 	}
			}
		}
	}
	if (failed)
	{
	   formName.elements[formField.name].focus();
	}
	return !failed;
}


