/***********************************************************************************************
 *
 * JS Standard library
 *
 * Auteur : Novalet renaud (mai 2003)
 *
 * modifications :
 *
 ************************************************************************************************

 functions prototypes
 --------------------

 function isValideData(thisValue)
 function checkNiss(thisNiss)
 function isNum(s)
 function isInteger(s)
 function szreplace(string,text,by)
 function checkFormat(szString,szFormat)

 ** DATE ************************
 function stripCharsInBag(s, bag)
 function daysInFebruary (year)
 function DaysArray(n)
 function isDate(dtStr)

 ** IMAGE ************************
 function MM_swapImgRestore()
 function MM_swapImage()
 function MM_findObj(n, d)
 function MM_preloadImages()

 ** WINDOW & SCREEN **************
 function DisplayStatus(szString)
 function getScreenInfos()
 function centerWindow(hWnd,wW,wH)
 function relativeWidth(xwidth)
 function relativeHeigth(xlength)
 function setWindowPos(hWnd,x,y,xwidth,xlength)
 function maximizeWindow(hWnd)

 ************************************************************************************************/


/**************************************************************************************************
 *
 *
 *   BROWSER VARIABLE
 *
 *
 **************************************************************************************************/

var szNavigator = navigator.appName;
var appVer 		= navigator.appVersion.toLowerCase();
var szAgent     = navigator.userAgent.toLowerCase();

var is_minor = parseFloat(navigator.appVersion);
var is_major = parseInt(is_minor);

var iePos  = appVer.indexOf('msie');
    if (iePos !=-1) {
       is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)))
       is_major = parseInt(is_minor);
    }

    // Netscape6 is mozilla/5 + Netscape6/6.0!!!
    // Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20001108 Netscape6/6.0
    var nav6Pos = szAgent.indexOf('netscape6');
    if (nav6Pos !=-1) {
       is_minor = parseFloat(szAgent.substring(nav6Pos+10))
       is_major = parseInt(is_minor)
    }

var is_nav	= ((szAgent.indexOf('mozilla')!=-1) && (szAgent.indexOf('spoofer')==-1)
               && (szAgent.indexOf('compatible') == -1) && (szAgent.indexOf('opera')==-1)
               && (szAgent.indexOf('webtv')==-1));
var is_nav2 = (is_nav && (is_major == 2));
var is_nav3 = (is_nav && (is_major == 3));
var is_nav4 = (is_nav && (is_major == 4));
var is_nav4up = (is_nav && (is_major >= 4));
var is_navonly= (is_nav && ((szAgent.indexOf(";nav") != -1) ||(szAgent.indexOf("; nav") != -1)) );
var is_nav6   = (is_nav && is_major==6);
var is_nav6up = (is_nav && is_minor >= 6)
var is_nav5   = (is_nav && is_major == 5 && !is_nav6);
var is_nav5up = (is_nav && is_minor >= 5);

var is_opera = (szAgent.indexOf("opera") != -1);

var is_ie	= (iePos!=-1)
var is_ie3  = (is_ie && (is_major < 4));
var is_ie4   = (is_ie && is_major == 4);
var is_ie4up = (is_ie && is_minor >= 4);
var is_ie5   = (is_ie && is_major == 5);
var is_ie5up = (is_ie && is_minor >= 5);



// ************ PLATFORM *************************************************************
var is_win   = ( (szAgent.indexOf("win")!=-1) || (szAgent.indexOf("16bit")!=-1) );
var is_win95 = ((szAgent.indexOf("win95")!=-1) || (szAgent.indexOf("windows 95")!=-1));
var is_win16 = ((szAgent.indexOf("win16")!=-1) ||
               (szAgent.indexOf("16bit")!=-1) || (szAgent.indexOf("windows 3.1")!=-1) ||
               (szAgent.indexOf("windows 16-bit")!=-1) );

var is_win31 = ((szAgent.indexOf("windows 3.1")!=-1) || (szAgent.indexOf("win16")!=-1) ||
                  (szAgent.indexOf("windows 16-bit")!=-1));

var is_win98 = ((szAgent.indexOf("win98")!=-1) || (szAgent.indexOf("windows 98")!=-1));
var is_winnt = ((szAgent.indexOf("winnt")!=-1) || (szAgent.indexOf("windows nt")!=-1));
var is_win32 = (is_win95 || is_winnt || is_win98 ||
                  ((is_major >= 4) && (navigator.platform == "Win32")) ||
                  (szAgent.indexOf("win32")!=-1) || (szAgent.indexOf("32bit")!=-1));

var is_os2   = ((szAgent.indexOf("os/2")!=-1) ||
                  (navigator.appVersion.indexOf("OS/2")!=-1) ||
                  (szAgent.indexOf("ibm-webexplorer")!=-1));

var is_mac    = (szAgent.indexOf("mac")!=-1);
var is_mac68k = (is_mac && ((szAgent.indexOf("68k")!=-1) ||(szAgent.indexOf("68000")!=-1)));
var is_macppc = (is_mac && ((szAgent.indexOf("ppc")!=-1) || (szAgent.indexOf("powerpc")!=-1)));

var is_sun   = (szAgent.indexOf("sunos")!=-1);
var is_sun4  = (szAgent.indexOf("sunos 4")!=-1);
var is_sun5  = (szAgent.indexOf("sunos 5")!=-1);
var is_suni86= (is_sun && (szAgent.indexOf("i86")!=-1));
var is_irix  = (szAgent.indexOf("irix") !=-1);    // SGI
var is_irix5 = (szAgent.indexOf("irix 5") !=-1);
var is_irix6 = ((szAgent.indexOf("irix 6") !=-1) || (szAgent.indexOf("irix6") !=-1));
var is_hpux  = (szAgent.indexOf("hp-ux")!=-1);
var is_hpux9 = (is_hpux && (szAgent.indexOf("09.")!=-1));
var is_hpux10= (is_hpux && (szAgent.indexOf("10.")!=-1));

var is_aix   = (szAgent.indexOf("aix") !=-1);      // IBM
var is_aix1  = (szAgent.indexOf("aix 1") !=-1);
var is_aix2  = (szAgent.indexOf("aix 2") !=-1);
var is_aix3  = (szAgent.indexOf("aix 3") !=-1);
var is_aix4  = (szAgent.indexOf("aix 4") !=-1);
var is_linux = (szAgent.indexOf("inux")!=-1);
var is_sco   = (szAgent.indexOf("sco")!=-1) || (szAgent.indexOf("unix_sv")!=-1);
var is_unixware = (szAgent.indexOf("unix_system_v")!=-1);
var is_mpras    = (szAgent.indexOf("ncr")!=-1);
var is_reliant  = (szAgent.indexOf("reliantunix")!=-1);
var is_dec   = ((szAgent.indexOf("dec")!=-1) || (szAgent.indexOf("osf1")!=-1) ||
           		(szAgent.indexOf("dec_alpha")!=-1) || (szAgent.indexOf("alphaserver")!=-1) ||
           		(szAgent.indexOf("ultrix")!=-1) || (szAgent.indexOf("alphastation")!=-1));

var is_sinix = (szAgent.indexOf("sinix")!=-1);
var is_freebsd = (szAgent.indexOf("freebsd")!=-1);
var is_bsd = (szAgent.indexOf("bsd")!=-1);

var is_unix  = ((szAgent.indexOf("x11")!=-1) || is_sun || is_irix || is_hpux ||
                 is_sco ||is_unixware || is_mpras || is_reliant ||
                 is_dec || is_sinix || is_aix || is_linux || is_bsd || is_freebsd);

var is_vms   = ((szAgent.indexOf("vax")!=-1) || (szAgent.indexOf("openvms")!=-1));








/**************************************************************************************************
 *
 *
 *   FORMAT FUNCTIONS
 *
 *
 **************************************************************************************************/



/******************************************************************************
 *	isValideData()
 *******************************************************************************/
function isValideData(thisValue)
{
if(thisValue=="" || thisValue==" " || thisValue==null || szreplace(thisValue," ","")=="")
 return false;
return true;
}
/******************************************************************************
 *	checkNiss()
 *******************************************************************************/
function checkNiss(thisNiss)
{
	var thisKey=thisNiss;

	if(thisNiss.length!=11){
		return false;
	}

	var sztt=thisKey.substr(0,9);
	var sztt2=thisKey.substr(9,2);

	var li=parseInt(sztt);
	var li2=parseInt(sztt2,10);

	li=li % 97;
	var res=97-li;

    if(res!=li2){
    	return false;
    }
	return true;
}

/******************************************************************************
 *	isInteger()
 *******************************************************************************/
function isInteger(s)
{
	var i;
    for (i = 0; i < s.length; i++){
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
/******************************************************************************
 *	isNum()
 *******************************************************************************/

function isNum(s)
{
 for (var i=0;i<s.length;i++){
    if (isNaN(s.charAt(i))){
       return false;
    }
 }
 return true;
}

 function IsNumeric(strString)
    //  check for valid numeric strings
    {
    var strValidChars = "0123456789.-";
    var strChar;
    var blnResult = true;

    if (strString.length == 0) return false;

    //  test strString consists of valid characters listed above
    for (i = 0; i < strString.length && blnResult == true; i++)
       {
       strChar = strString.charAt(i);
       if (strValidChars.indexOf(strChar) == -1)
          {
          blnResult = false;
          }
       }
    return blnResult;
    }


/******************************************************************************
 *	checkFormat()
 *******************************************************************************/
function checkFormat(szString,szFormat)
{
if(szString.length!=szFormat.length)
	return false;

   for (var i=0;i<szFormat.length;i++){
	switch(szFormat.charAt(i)){
		case '#':  //Numeric value
			if (isNaN(szString.charAt(i)))
				return false;
			break;
		case 'A':
			if (!isNaN(szString.charAt(i)))
				return false;
			if (!(szString.charCodeAt(i)>=65 && szString.charCodeAt(i)<=90 ))
				return false;
			break;
		case 'a':
			if (!isNaN(szString.charAt(i)))
				return false;
			if (!(szString.charCodeAt(i)>=97 && szString.charCodeAt(i)<=122 ))
				return false;
			break;
		default:
			if (szString.charAt(i)!=szFormat.charAt(i))
				return false;
			break;
	} //end switch
   }// end for
   return true;
}

/******************************************************************************
 *	szreplace()
 *******************************************************************************/
function szreplace(string,text,by)
{
    var strLength = string.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return string;

    var i = string.indexOf(text);
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;

    var newstr = string.substring(0,i) + by;

    if (i+txtLength < strLength)
        newstr += szreplace(string.substring(i+txtLength,strLength),text,by);

    return newstr;
}





















/**************************************************************************************************
 *
 *
 *   DATE FUNCTIONS
 *
 *
 **************************************************************************************************/

var dtCh= "/";
var minYear=1900;
var maxYear=2100;

/******************************************************************************
 *	stripCharsInBag
 *******************************************************************************/
function stripCharsInBag(s, bag)
{
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

/******************************************************************************
 *	daysInFebruary
 *******************************************************************************/
function daysInFebruary (year)
{
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

/******************************************************************************
 *	DaysArray
 *******************************************************************************/
function DaysArray(n)
{
    var thisa= new Array(n+1)
	for (var i = 1; i <= n; i++) {
		thisa[i] = 31;
		if (i==4 || i==6 || i==9 || i==11) {
		   thisa[i] = 30;
		}
		if (i==2) {
		    thisa[i] = 29;
		}
   }
   return thisa;
}

/******************************************************************************
 *	isDate
 *******************************************************************************/
function isDate(dtStr)
{
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strMonth=dtStr.substring(0,pos1);
	var strDay=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1)
		strDay=strDay.substring(1);
	if (strMonth.charAt(0)=="0" && strMonth.length>1)
		strMonth=strMonth.substring(1);

	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);


	if (pos1==-1 || pos2==-1){
		alert("La date doit avoir le format : mm/dd/yyyy");
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Le moi spécifié est incorrect !");
		return false;
	}

	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Le jour spécifié est incorrect pour ce moi !");
		return false;
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Veuillez entrer une année en 4 chiffres (entre "+minYear+" et "+maxYear+")");
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Entrez une date valide");
		return false;
	}
return true
}





function isFrenchDate(dtStr)
{
	if (dtStr.lenght==0 || dtStr=="")
		return true;
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strDay=dtStr.substring(0,pos1);
	var strYear=dtStr.substring(pos2+1);

	if (strYear.length==2) strYear="20" + strYear;

	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1)
		strDay=strDay.substring(1);
	if (strMonth.charAt(0)=="0" && strMonth.length>1)
		strMonth=strMonth.substring(1);


	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}


	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);



	if (pos1==-1 || pos2==-1){
		alert("La date doit avoir le format : jj/mm/aaaa");
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Le moi spécifié est incorrect !");
		return false;
	}

	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Le jour spécifié est incorrect pour ce moi !");
		return false;
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Veuillez entrer une année en 4 chiffres (entre "+minYear+" et "+maxYear+")" + strYear);
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Entrez une date valide");
		return false;
	}
return true
}



/**************************************************************************************************
 *
 *
 *   IMAGE FUNCTIONS
 *
 *
 **************************************************************************************************/


/******************************************************************************
 *	MM_preloadImages()
 *******************************************************************************/
function MM_preloadImages()
{ //v3.0
	if(document.images){
		if(!document.MM_p)
			document.MM_p=new Array();
    var i,j=document.MM_p.length,
			  a=MM_preloadImages.arguments;
		for(i=0; i<a.length; i++)
    		if (a[i].indexOf("#")!=0){
					 document.MM_p[j]=new Image;
					 document.MM_p[j++].src=a[i];
			  }
	}
}

/******************************************************************************
 *	MM_findObj(n, d)
 *******************************************************************************/
function MM_findObj(n, d)
{
 	var p,i,x;

	if((p=n.indexOf("?"))>0&&parent.frames.length) {
	    document=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
	}
	if(!(x=document[n])&& is_ie)
		x=document.all[n];

	for (i=0;!x&&i<document.forms.length;i++){
			x=document.forms[i][n];
	}
  for(i=0;!x&&document.layers&&i<document.layers.length;i++){
			x=MM_findObj(n,document.layers[i].document);
	}
  if(!x && document.getElementById) {
			x=document.getElementById(n);
	}
	return x;
}

/******************************************************************************
 *	MM_swapImage()
 ******************************************************************************/
function MM_swapImage()
{ //v3.0
 var i, j=0,	x,
		 a=MM_swapImage.arguments;

  	  document.MM_sr=new Array;
	  for(i=0;i<(a.length-2);i+=3){
   		if ((x=MM_findObj(a[i]))!=null){
				document.MM_sr[j++]=x;
				   x.oSrc=x.src;
			   x.src=a[i+2];

		  }
		} // end for

}

/******************************************************************************
 *	MM_swapImgRestore()
 ******************************************************************************/
function MM_swapImgRestore()
{
	var i,x,a=document.MM_sr;
	for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) {
		x.src=x.oSrc;
		x.oSrc=null;
	}
if (is_ie)
	document.MM_sr=new Array;
}











/**************************************************************************************************
 *
 *
 *   WINDOWS FUNCTIONS
 *
 *
 **************************************************************************************************/

/*******************************************************************************
 *	Function DisplayStatus
 *******************************************************************************/
function DisplayStatus(szString)
{
parent.self.status=szString;
return true;
}
/*********************************************************************************************
 *	getScreenInfos
 *********************************************************************************************/
function getScreenInfos()
{
var h,w;
w = screen.availWidth;
h = screen.availHeight;

var	szmsg='Your screen is: ' + screen.width + ' pixels by ' + screen.height + ' pixels\n';
	szmsg=szmsg+'taillle de l\'ecran diponible pour la fenêtre : ' +w+ 'x'+ h + ' pixels\n';
	alert(szmsg);
}

/*********************************************************************************************
 *	centerWindow
 *********************************************************************************************/
function centerWindow(hWnd,wW,wH)
{
var h,w,popH,popW;
var leftPos,topPos;
 if (hWnd){
		// taille de l'écran disponible (sans startmenu,...)
		w = screen.availWidth;
		h = screen.availHeight;

		if (is_nav) {
 			 popH=wH+16;
			 popW=wW+16;
		} else {
			 popH=wH+20;
			 popW=wW+20;
		}

	    leftPos = (w-popW)/2;
	 	topPos  = (h-popH)/2;

	    if (leftPos <0 ) leftPos=0;
		if (topPos < 0 ) topPos=0;

   	    if(hWnd.moveTo)
   	         hWnd.moveTo(leftPos,topPos);
	}
}
/*********************************************************************************************
 *	relativeWidth
 *********************************************************************************************/
function relativeWidth(xwidth)
{
 var retval=xwidth;
 if ( is_nav){
    switch(retval){
 		case 640:  retval-=4;
				 		   break;
		case 800:  retval-=4;
				 		   break;
		case 1024: retval-=4;
				 		   break;
		}
 } else { // IE
    switch(retval){
 		case 640:  retval+=8;
				 			 break;
		case 800:  retval+=8;
				 			 break;
		case 1024: retval+=8;
				 			 break;
		}
 } // end else IE

return retval;
}
/*********************************************************************************************
 *	relativeHeigth
 *********************************************************************************************/
function relativeHeigth(xlength)
{
 var retval=xlength;
 if ( is_nav){
    switch(retval){
 		case 480:  retval-=70;
				 		   break;
		case 600:  retval-=70;
				 		   break;
		case 768:  retval-=70;
				 		   break;
		}
 } else { // IE
    switch(retval){
 		case 480:	 retval+=8;
				 			 break;
		case 600:  retval+=8;
				 			 break;
		case 768: retval+=8;
				 			 break;
		}
 } // end else IE

return retval;
}
/*********************************************************************************************
 *	setWindowPos
 *********************************************************************************************/
function setWindowPos(hWnd,x,y,xwidth,xlength)
{
 var h=xlength,w=xwidth;
	if (hWnd.moveTo)
	   hWnd.moveTo(x,y);
    if (hWnd.resizeTo) {
	    hWnd.resizeTo(relativeWidth(xwidth),relativeHeigth(xlength));
	}

}
/*********************************************************************************************
 *	maximizeWindow
 *********************************************************************************************/
function maximizeWindow(hWnd)
 {
 var h,w;
 	w = screen.availWidth;
	h = screen.availHeight;

 	if (hWnd.moveTo) hWnd.moveTo(-4,-4);
	if (hWnd.resizeTo) hWnd.resizeTo(w,h);
 }




/**************************************************************************************
 *
 * Neon msg
 *
 **************************************************************************************/



var messageN;
var neonbasecolor="#224860";
var neontextcolor="red";
var flashspeedN=50;  //in milliseconds
var n=0;

function crossref(number){
	var crossobj=document.all? eval("document.all.neonlight"+number) : document.getElementById("neonlight"+number)
	return crossobj
}

function neon(){

//Change all letters to base color
if (n==0){
	for (m=0;m<messageN.length;m++)
	//eval("document.all.neonlight"+m).style.color=neonbasecolor
	crossref(m).style.color=neonbasecolor
}

//cycle through and change individual letters to neon color
crossref(n).style.color=neontextcolor

if (n<messageN.length-1)
n++
else{
n=0
clearInterval(flashing)
setTimeout("beginneon()",1000)
return
}
}


function beginneon(){
	if (document.all||document.getElementById)
	flashing=setInterval("neon()",flashspeedN)
}




function NeonMessage(s)
{

///No need to edit below this line/////

	var n=0;
	messageN=s;
	if (document.all||document.getElementById){
		document.write('<font color="'+neonbasecolor+'">')
		for (m=0;m<messageN.length;m++)
			document.write('<span id="neonlight'+m+'">'+messageN.charAt(m)+'</span>')
		document.write('</font>')
	}else
	document.write(messageN)

	beginneon()
}



