
///---------------------------------Begin Dates-------------------------------------///
// Begin calcul de la différence entre deux dates
function bissextile(annee) {
	if (annee%4==0 && annee %100!=0 || annee%400==0) return true; else return false
}

function nb_01_01(date){
	nb_mois=new Array(13);
	nb_mois=[,0,31,59,90,120,151,181,212,243,273,304,334];
	j=eval(date[0]) ; m=eval(date[1]) ; a=eval(date[2]);
	nb=nb_mois[m]+j-1 ;
	if (bissextile(a) && m>2) nb++;
	return nb;
}

function nb_jour_annee(a1,a2){
	n=0;
	if (a1==a2) n=0 ; else
	for (i=a1; i<a2; i++) {n += 365; if (bissextile(i)) n++}
	return n;
}

function nb_jour(date1,date2){
	a1=eval(date1[2]) ; a2=eval(date2[2]) ; 
	nb=nb_jour_annee(date1[2],date2[2]) - nb_01_01(date1) + nb_01_01(date2);
	if(nb < 0) nb = 0;
	return nb;
}

function GetDays(strArrivalDate, strDepartureDate)
{
	if (!isDate(strArrivalDate) || !isDate(strDepartureDate))
		return 0;
		
	var tabArrivalDate	 = strArrivalDate.split("/");
	var tabDepartureDate = strDepartureDate.split("/");
	
	return nb_jour(tabArrivalDate, tabDepartureDate);
}

//function CalculateOvernightsPeriod(objDepartureDate,objArrivalDate, objResult)
//{
//	if (!objDepartureDate || !objArrivalDate || !objResult)
//		return;
//	var tabDepartureDate = objDepartureDate.value.split("/");
//	var tabArrivalDate = objArrivalDate.value.split("/");
//	if ((objDepartureDate.value !="") && (objArrivalDate.value !=""))
//		objResult.value = nb_jour(tabDepartureDate,tabArrivalDate);
//	else
//		objResult.value = "0";
//		
//	// check that the number parameter is numeric. 
//    if (isNaN (objResult.value))
//		objResult.value = "0";
//	
//}
// End calcul de la différence entre deux dates

function AddDays(strDate, intNumberOfDays)
{
	if ((isNaN(intNumberOfDays)) || (intNumberOfDays < 0))
        return "";

	// set input date
    var tabArrivalDate = strDate.split("/");
    var start	= eval(tabArrivalDate[1]) + "/" + eval(tabArrivalDate[0]) + "/" + eval(tabArrivalDate[2]);
    
    // get the milliseconds for this Date object.
    // then, check that the start parameter is a valid Date.
    var buffer = Date.parse( start ) ;
    if ( isNaN (buffer) ) 
        return "";
	
	intNumberOfDays *= 24 * 60 * 60 * 1000; // days to milliseconds
	intNumberOfDays +=  6*60*60*1000; // wg: add six hours to avoid "daylight saving changes" problem on october 28 <=> october 29
	
    var tmpDate = new Date( buffer + intNumberOfDays ) ;
    
    var strMonth = tmpDate.getMonth() + 1;
    if ((tmpDate.getMonth() + 1) < 10 ) strMonth = "0" + (tmpDate.getMonth() + 1);
    
    var strDay = tmpDate.getDate();
    if (tmpDate.getDate() < 10 ) strDay = "0" + tmpDate.getDate();
    
    return strDay + "/" + strMonth + "/" + tmpDate.getFullYear();
}

function isInt(Value) {
	var parsedValue = parseInt(Value, 10);
	if (parsedValue != Value || isNaN(parsedValue)) 
		return false;
		
	return true;
}

function isDate(fld) {
    var mo, day, yr;
    var entry = fld;
    var re = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/;
    if (re.test(entry)) {
        var delimChar = (entry.indexOf("/") != -1) ? "/" : "-";
        var delim1 = entry.indexOf(delimChar);
        var delim2 = entry.lastIndexOf(delimChar);
        day = parseInt(entry.substring(0, delim1), 10);
        mo = parseInt(entry.substring(delim1+1, delim2), 10);
        yr = parseInt(entry.substring(delim2+1), 10);
        var testDate = new Date(yr, mo-1, day);
        //alert(testDate)
        if (testDate.getDate( ) == day) {
            if (testDate.getMonth( ) + 1 == mo) {
                if (testDate.getFullYear( ) == yr) {
                    return true;
                } else {
                    //alert("There is a problem with the year entry.");
                }
            } else {
                //alert("There is a problem with the month entry.");
            }
        } else {
            //alert("There is a problem with the <FONT style="BACKGROUND-COLOR: #0a246a" color=#ffffff>date</FONT> entry.");
        }
    } else {
        //alert("Incorrect <FONT style='BACKGROUND-COLOR: #0a246a' color=#ffffff>date</FONT> format. Enter as mm/dd/yyyy.");
    }
    return false;
}


//On suppose que la date entrée a été validée auparavant
//au format dd/mm/yyyy
function GetDate(strDate)
{	  
    day = strDate.substring(0,2);
	month = strDate.substring(3,5);
	year = strDate.substring(6,10);
	d = new Date();
	d.setDate(day);
	d.setMonth(month);
	d.setFullYear(year); 

	return d;  
}
	  
	  //Retorune:
	  //   0 si strDateToDate = strFromDate
  	  //   1 si strDateToDate > strFromDate
	  //  -1 si strDateToDate < strFromDate	  
	
function Compare2Dates(strDateToDate, strFromDate)
{
	strDateToDate = GetDate(strDateToDate);
	strFromDate = GetDate(strFromDate);
    diff = strDateToDate.getTime() - strFromDate.getTime();
    return (diff==0?diff:diff/Math.abs(diff));
}

function isMail(str)
{
 var filter=/^.+@.+\..{2,3}$/
 return (filter.test(str))
}

// Date Add
//function dateAdd( objArrivalDate, interval, objPeriod, objResult ) {
//	
  //  var number	= objPeriod.value;
//    var tabArrivalDate = objArrivalDate.value.split("/");
//    var start	= eval(tabArrivalDate[1]) + "/" + eval(tabArrivalDate[0]) + "/" + eval(tabArrivalDate[2]);
    
//	if ((isNaN(objPeriod.value)) || (objPeriod.value < 0))
//		objResult = "";	
	//var entryDate = new Date(eval(tabArrivalDate[2]),eval(tabArrivalDate[1]),eval(tabArrivalDate[0]));
    // Create 3 error messages, 1 for each argument. 
//    var startMsg = "Sorry the start parameter of the dateAdd function\n"
//        startMsg += "must be a valid date format.\n\n"
//        startMsg += "Please try again." ;
		
//    var intervalMsg = "Sorry the dateAdd function only accepts\n"
//        intervalMsg += "d, h, m OR s intervals.\n\n"
//        intervalMsg += "Please try again." ;

//    var numberMsg = "Sorry the number parameter of the dateAdd function\n"
//        numberMsg += "must be numeric.\n\n"
//        numberMsg += "Please try again." ;
		
    // get the milliseconds for this Date object.
//    var buffer = Date.parse( start ) ;
    // check that the start parameter is a valid Date.
//    if ( isNaN (buffer) ) {
        //alert( startMsg ) ;
//        objResult.value = "0" ;
//        return null;
//    }
	
    // check that an interval parameter was not numeric. 
//    if ( interval.charAt == 'undefined' ) {
        // the user specified an incorrect interval, handle the error. 
        //alert( intervalMsg ) ;
//        objResult.value = "0";
//        return null ;
//    }

    // check that the number parameter is numeric. 
//    if ( isNaN ( number ) )	{
//        objResult.value = "0" ;
//        return null ;
//    }

    // so far, so good...
    //
    // what kind of add to do?
//    switch (interval.charAt(0))
//    {
//        case 'd': case 'D': 
//            number *= 24 ; // days to hours
            // fall through!
//        case 'h': case 'H':
//            number *= 60 ; // hours to minutes
            // fall through! 
//        case 'm': case 'M':
//            number *= 60 ; // minutes to seconds
            // fall through!
//        case 's': case 'S':
//            number *= 1000 ; // seconds to milliseconds
//            break ;
//        default:
        // If we get to here then the interval parameter
        // didn't meet the d,h,m,s criteria.  Handle
        // the error.		
       // alert(intervalMsg) ;
 //       return null ;
 //   }
//    var tmpDate = new Date( buffer + number ) ;
//    
//    var strMonth = tmpDate.getMonth() + 1;
//    if ((tmpDate.getMonth() + 1) < 10 ) strMonth = "0" + (tmpDate.getMonth() + 1);
//    
//     var strDay = tmpDate.getDate();
//    if (tmpDate.getDate() < 10 ) strDay = "0" + tmpDate.getDate();
//    
//    objResult.value = strDay+ "/" + strMonth + "/" + tmpDate.getFullYear();
//}

//function isDateGreaterOrEqualThanNow(objDate, objDiv) {
//	
//    var tabDate = objDate.value.split("/");
//    var start	= eval(tabDate[1]) + "/" + eval(tabDate[0]) + "/" + eval(tabDate[2]);
    
    // get the milliseconds for this Date object.
 //   var buffer = Date.parse( start ) ;
    // check that the start parameter is a valid Date.
//    if ( isNaN (buffer) ) {
//        return false;
//    }
	//Date.parse : Analyse une chaîne contenant une date et retourne le nombre de millisecondes 
	// entre cette date et le 1er janvier 1970 à minuit.
//   var currentTime =  Date.parse( new Date());
//   currentTime = currentTime - (1000*60*60*24); // le nombre de millisecondes pour un jour
//   if (buffer < currentTime)
//	{
//		objDiv.style.display = '';
//		objDate.value= '';
//		return false;
//	}
//	else
//	{
//		objDiv.style.display = 'none';
//		return true;
//	}
//}

// is objDate Greater Than Now
//function isDateGreaterThanEqualNow(objDate, objDiv, objPeriod) {
	
  //  var tabDate = objDate.value.split("/");
//    var start	= eval(tabDate[1]) + "/" + eval(tabDate[0]) + "/" + eval(tabDate[2]);
    
    // get the milliseconds for this Date object.
//    var buffer = Date.parse( start ) ;
    // check that the start parameter is a valid Date.
//    if ( isNaN (buffer) ) {
//        return false;
//    }
	//Date.parse : Analyse une chaîne contenant une date et retourne le nombre de millisecondes 
	// entre cette date et le 1er janvier 1970 à minuit.
//   var currentTime =  Date.parse( new Date());
//   currentTime = currentTime - (1000*60*60*24); // le nombre de millisecondes pour un jour
//   if (buffer < currentTime)
//	{
//		objDiv.style.display = '';
//		objDate.value= '';
//		objPeriod.value = 0;
//		return false;
//	}
//	else
//	{
//		objDiv.style.display = 'none';
//		return true;
//	}
//}

function CheckDateGreaterOrEqualThanNow(source, arguments) 
{	
		
	var tabDate = arguments.Value.split("/");
	
	if (!isInt(tabDate[0]) || !isInt(tabDate[1]) || !isInt(tabDate[2]))
		{
			return;
		}
		
	var start	= eval(tabDate[1]) + "/" + eval(tabDate[0]) + "/" + eval(tabDate[2]);

	// get the milliseconds for this Date object.
	var buffer = Date.parse( start ) ;
	// check that the start parameter is a valid Date.
	if ( isNaN (buffer) )
		arguments.IsValid = false;
	//Date.parse : Analyse une chaîne contenant une date et retourne le nombre de millisecondes 
	// entre cette date et le 1er janvier 1970 à minuit.
	var currentTime =  Date.parse( new Date());
	currentTime = currentTime - (1000*60*60*24); // le nombre de millisecondes pour un jour
	if (buffer < currentTime)
		arguments.IsValid = false;
	else
		arguments.IsValid = true;
}

///---------------------------------End Dates-------------------------------------///

// Hide the specified image when an error occurs for exemple.
//function HideControl(objImage)
//{
//	objImage.style.display = 'none';
//}

///---------------------------------Begin Arrays-------------------------------------///

function emptyArray(objArray, objInputId)
{
	for(var i = 0; i < objArray.length; i++)
	{
		if(objArray[i]==objInputId)
		{
			objArray.splice(i,1);
			return true;
		}
	}
}
function fillArray(objArray, objInputId)
{
	for(var i = 0; i < objArray.length; i++)
	{
		if(objArray[i]==objInputId)
			return true;
	}
	objArray.push(objInputId);
}
function isArrayEmpty(objArray)
{
	if(objArray.length == 0)
		return true;
	return false;
}

function ShowCityWindow(path)
{
var new_window=window.open (path,'new_window','resizable=1,scrollbars=1,width=800,height=400px');
new_window.focus();
}

function ShowDestinationWindow(path)
{
var new_window=window.open (path,'new_window','resizable=1,scrollbars=1,width=800,height=400px');
new_window.focus();
}

function afficheMaxi(chemin,title) 
{
	Imageslim = new Image;
	Imageslim.src = chemin;
	//titre='Plan d\'accès';
	popupImage = window.open('','grande','toolbar=0,location=0,directories=0,menuBar=0,scrollbars=0,resizable=0,height=10,width=10,left=0, top=0');

	html = '<HTML><HEAD><TITLE>'+title+'</TITLE><link href="../../css/general.css" rel="stylesheet" type="text/css">' + '<' + 'script src="../../scripts/misc.js">' + '</' + 'script' + '></HEAD><BODY LEFTMARGIN=0 MARGINWIDTH=0 TOPMARGIN=0 MARGINHEIGHT=0 onLoad="self.focus();">';
	html =html+'<table width="100%" height="100%"  border="0" cellpadding="0" cellspacing="0"><tr>';
	html =html+'<td valign="middle" align="center">';
	html =html+'<IMG SRC="'+chemin+'" BORDER=0 NAME=imageTest onLoad="window.resizeTo(document.imageTest.width+30,document.imageTest.height+80);window.moveTo(20,20);self.focus();"></td>';
	html =html+'</tr></table></body></HTML>';      

	popupImage.document.open();
	popupImage.document.write(html);
	popupImage.document.close();
}
///---------------------------------End Arrays-------------------------------------///

function DesactivateEnterKey(event)
{
//	if (event)
//		if (event.which == 13) return false;
//	else
//		if (window.event.keyCode == 13) return false;
//		
//	return true;
}

function Display_AdvancedDetail()
{
	var objDiv = document.getElementById("Div_Advanced");
	objDiv.style.display = (objDiv.style.display == '') ? 'none' : '';
}

function Display_Address()
{
	var objDiv = document.getElementById("Div_AddressTitle");
	objDiv.style.display = (objDiv.style.display == '') ? 'none' : '';
}


///--------------------------------------------------------

function xstooltip_show(tooltipId, parentId, posX, posY, bLeftShifting)
{
    it = document.getElementById(tooltipId);
    
    if ((it.style.top == '' || it.style.top == 0) 
        && (it.style.left == '' || it.style.left == 0))
    {
        // need to fixate default size (MSIE problem)
        it.style.width = it.offsetWidth + 'px';
        it.style.height = it.offsetHeight + 'px';
        
        img = document.getElementById(parentId); 

		if (bLeftShifting)
		{    
			// if tooltip is too wide, shift left to be within parent 
			if (posX + it.offsetWidth > img.offsetWidth) posX = img.offsetWidth - it.offsetWidth;
			if (posX < 0 ) posX = 0; 
        }
        
        x = xstooltip_findPosX(img) + posX;
        y = xstooltip_findPosY(img) + posY;
        
        it.style.top = y + 'px';
        it.style.left = x + 'px';
    }
    
    it.style.visibility = 'visible'; 
}

function xstooltip_findPosY(obj) 
{
    var curtop = 0;
    if (obj.offsetParent) 
    {
        while (obj.offsetParent) 
        {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}

function xstooltip_findPosX(obj) 
{
  var curleft = 0;
  if (obj.offsetParent) 
  {
    while (obj.offsetParent) 
        {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function xstooltip_hide(id)
{
    it = document.getElementById(id); 
    it.style.visibility = 'hidden'; 
}

function Display_Login()
{
	var objDiv = document.getElementById('Div_Login');
	var objLabel = document.getElementById('Label_Login');	
	if (objDiv.style.display == '')
	{
		objDiv.style.display = 'none';		
		objLabel.innerText = '[+]';	
	}
	else
	{
		objDiv.style.display = '';
		objLabel.innerText = '[-]';	
	}					
}

function Display_Hide_Div(Div_Login,Label_Login)
{
	var objDiv = document.getElementById('Div_Login');
	var objLabel = document.getElementById('Label_Login');	
	if (objDiv.style.display == '')
	{
		objDiv.style.display = 'none';		
		objLabel.innerText = '[+]';	
	}
	else
	{
		objDiv.style.display = '';
		objLabel.innerText = '[-]';	
	}					
}

function Display_MemberInfo()
{
	var objDiv = document.getElementById('divMemberInfo');
	if (objDiv.style.display == '')
		objDiv.style.display = 'none';		
	else
		objDiv.style.display = '';
}
