/*****************************************************************
Description : Module contenant diverses fonctions JavaScript 
				de manipulation de date.
Auteur : Vincent Boileau
Date création : 20/11/1998
Dernière modification : 25/05/1999
	250599VB: Ajout de la fonction RecupJour(Date)
*****************************************************************/
function Round(val) {
//	Renvoi la valeur arrondie supérieure de 'val'
	if (parseFloat(val) - Math.floor(val) < 0.5) return Math.floor(val)
	else return Math.ceil(val)
}

function coupe(chaine, separateur) {
// Equivalent a la fonction Split sous VB
	var tab = new Array();
	var element = "";
	var indice = 0;
	
	for (var i = 0; i < chaine.length; i++) {
		var oneChar  =chaine.charAt(i);
		if (oneChar == separateur) {
			tab[indice] = element;
			indice++;
			element = "";
		}
		else element = element + oneChar;
	}
	if (element != "") tab[indice] = element;
	return tab;
}

function quenombre(chaine) {
// La chaine ne contient que des nombres
	for (var i = 0; i < chaine.length; i++) {
		var oneChar = chaine.charAt(i)
		if (oneChar < "0" || oneChar > "9") return false;
	}
	return true;
}

function queheure(chaine) {
// La chaine est de type hh:mm
//alert(chaine);
	if (chaine == "" || chaine == null) return true;
	if (chaine.length == 3) { 
		chaine = chaine + "00"
	}
	if (chaine.length == 2) { 
		chaine = chaine + ":00"
	}
	for (var i = 0; i < chaine.length; i++) {
		var oneChar = chaine.charAt(i)
		//alert (oneChar);
		if (oneChar < "0" || oneChar > "9") {
		//alert("pas number");
			if (oneChar != "H" && oneChar != "h" && oneChar != ":" ) {
				//alert("pas H");
				return false;
			}
		}
	}
	return true;
}

function separe (vardate, separateur) {
// Met la date vardate au format JJ/MM/AAAA
	var tabDate = new Array();
	tabDate = coupe (vardate, separateur);
	if (tabDate.length == 3) {
		annee = tabDate[2];
		if (annee.length == 2) {
			if (parseInt(annee) < 40) annee = "20" + annee
			else annee = "19" + annee;
		}
		else if (annee.length != 4) return "X";
		return tabDate[0]+"/"+tabDate[1]+"/"+annee
	}
	else if (tabDate.length == 1) return "";
	return "X";
}

function RecupHeure (varHeure) {
	var nouvelle;
	nouvelle = varHeure;
	if (varHeure.length == 3) { 
		if (quenombre(varHeure.substring(0,2))) {
			nouvelle = varHeure + "00"
		}
		else {
			nouvelle = "0" + varHeure + "0"
		}
	}
	if (varHeure.length == 4) { 
		if (quenombre(varHeure.substring(0,2))) {
			nouvelle = varHeure + "0"
		}
		else {
			nouvelle = "0" + varHeure
		}
	}
	if (varHeure.length == 2) { 
		 if (!quenombre(varHeure)) {
				nouvelle = varHeure + "00"
		 }
		 else {
				nouvelle = varHeure + ":00"
		}
	}
	if (varHeure.length == 1) { 
		nouvelle = "0" + varHeure + ":00"
	}
	return nouvelle;

}

function RecupDate (vardate) {
	var nouvelle;
	if (vardate.length < 6) return vardate;
	nouvelle = separe(vardate, "/")
	if (nouvelle == "X") return vardate;
	if (nouvelle == "") {
		nouvelle = separe(vardate, "-");
		if (nouvelle == "X") return vardate;
		if (nouvelle == "") {
			nouvelle = separe(vardate, " ");
			if (nouvelle == "X") return vardate;
			if (nouvelle == "") {
				if (!quenombre(vardate)) return vardate
				if (vardate.length == 6)
					if (vardate.substring(4, 6) < 20)
						nouvelle = vardate.substring(0,2) + "/" + vardate.substring(2,4) + "/20" + vardate.substring(4,6)
					else
						nouvelle = vardate.substring(0,2) + "/" + vardate.substring(2,4) + "/19" + vardate.substring(4,6)
				else 
					if (vardate.length == 8) 
						nouvelle = vardate.substring(0,2) + "/" + vardate.substring(2,4) + "/" + vardate.substring(4,8)
					else return vardate;
			}
		}
	}
	var tab = new Array();
	tab = coupe (nouvelle, "/");
	if (tab[0].length == 1) tab[0] = "0" + tab[0];
	if (tab[1].length == 1) tab[1] = "0" + tab[1];
	nouvelle = tab[0] + "/" + tab[1] + "/" + tab[2];
	return nouvelle;
}

function RecupAnnee(vardate) {
	// Retourne 0 si la date n'est pas valide
	if (!isValidDate(vardate)) {
		return 0;
	}
	else {
		return parseInt(vardate.substring(6, 10));
	}
}

function RecupMois(vardate) {
	// Retourne 0 si la date n'est pas valide
	if (!isValidDate(vardate)) {
		return 0;
	}
	else {
		return parseInt(vardate.substring(3, 5));
	}
}

function RecupJour(vardate) {
	// Retourne 0 si la date n'est pas valide
	if (!isValidDate(vardate)) {
		return 0;
	}
	else {
		return parseInt(vardate.substring(0, 2));
	}
}

function isValidDate (vardate) {
	var tab = new Array();
	
	if (vardate == "") return true;
	
	tab = coupe(vardate, "/");

	if (tab.length != 3) return false;
	
	if (tab[0].length>2) return false;
	if (tab[1].length>2) return false;
	
	if (tab[1].substring(0,1) == "0" && tab[1].length==2)
		mois = parseInt(tab[1].substring(1,2))
	else {
		if (tab[1] == "") return false;                
                mois = parseInt(tab[1]);
        }
	if (tab[0].substring(0,1) == "0" && tab[0].length==2)
		jour = parseInt(tab[0].substring(1,2))
	else {
		if (tab[0] == "") return false;
                jour = parseInt(tab[0]);
        }

	if (!quenombre(tab[0]) || !quenombre(tab[1]) || !quenombre(tab[2])) return false;
	
	var jm = new Array(12);
	jm[1] = 31;jm[3] = 31;jm[4] = 30;
	jm[5] = 31;jm[6] = 30;jm[7] = 31;jm[8] = 31;
	jm[9] = 30; jm[10] = 31;jm[11] = 30; jm[12] = 31;
	
	if ((parseInt(tab[2])%4 == 0 && parseInt(tab[2])%100 != 0) || (parseInt(tab[2])%400 == 0))
		jm[2] = 29;
	else jm[2] = 28;
        
	if (mois > 12) return false;
	if (mois <= 0) return false;
	if (jour > jm[mois]) return false;
	if (jour <= 0) return false;
	return true;	
}

function AvantDate(date1, date2) {
// Renvoie VRAI si la date 'date1' est antérieure à la date 'date2'
	var tab1 = new Array();
	var tab2 = new Array();

	//alert(date1);
	//alert(date2);
	
	tab1 = coupe(date1, "/");
	tab2 = coupe(date2, "/");

	annee1 = parseInt(tab1[2]);
	annee2 = parseInt(tab2[2]);

	if (tab1[1].substring(0,1) == "0")
		mois1 = parseInt(tab1[1].substring(1,2))
	else mois1 = parseInt(tab1[1]);
	//alert (tab2[1])
	if (tab2[1].substring(0,1) == "0")
		mois2 = parseInt(tab2[1].substring(1,2))
	else mois2 = parseInt(tab2[1]);

	if (tab1[0].substring(0,1) == "0")
		jour1 = parseInt(tab1[0].substring(1,2))
	else jour1 = parseInt(tab1[0]);
	if (tab2[0].substring(0,1) == "0")
		jour2 = parseInt(tab2[0].substring(1,2))
	else jour2 = parseInt(tab2[0]);
	
	if (annee1 > annee2) return false;
	if (annee1 < annee2) return true;
	if (mois1 > mois2) return false;
	if (mois1 < mois2) return true;
	if (jour1 > jour2) return false;
	return true;
}

function EgalDate(date1, date2) {
// Renvoie VRAI si la date 'date1' est égale à la date 'date2'
	var tab1 = new Array();
	var tab2 = new Array();
	tab1 = coupe(date1, "/");
	tab2 = coupe(date2, "/");

	annee1 = parseInt(tab1[2]);
	annee2 = parseInt(tab2[2]);
	if (tab1[1].substring(0,1) == "0")
		mois1 = parseInt(tab1[1].substring(1,2))
	else mois1 = parseInt(tab1[1]);
	if (tab2[1].substring(0,1) == "0")
		mois2 = parseInt(tab2[1].substring(1,2))
	else mois2 = parseInt(tab2[1]);

	if (tab1[0].substring(0,1) == "0")
		jour1 = parseInt(tab1[0].substring(1,2))
	else jour1 = parseInt(tab1[0]);
	if (tab2[0].substring(0,1) == "0")
		jour2 = parseInt(tab2[0].substring(1,2))
	else jour2 = parseInt(tab2[0]);
	
	return ((annee1 == annee2) && (mois1 == mois2) && (jour1 == jour2));
}

function isValidDateComp(dateStr) {
	// Checks for the following valid date formats:
	// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year

	var matchArray = dateStr.match(datePat); // is the format ok?
	if (matchArray == null) {
	alert(dateStr + " Date is not in a valid format.")
	return false;
	}
	month = matchArray[3]; // parse date into variables
	day = matchArray[1];
	year = matchArray[4];
	if (month < 1 || month > 12) { // check month range
	alert("Month must be between 1 and 12.");
	return false;
	}
	if (day < 1 || day > 31) {
	alert("Day must be between 1 and 31.");
	return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
	alert("Month "+month+" doesn't have 31 days!")
	return false;
	}
	if (month == 2) { // check for february 29th
	var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
	if (day>29 || (day==29 && !isleap)) {
	alert("February " + year + " doesn't have " + day + " days!");
	return false;
	   }
	}
	return true;
}

function dateDiff(varDate1, varDate2, varTime) {

	var datePat, matchArray, month, year, day;
	date1 = new Date();
	date2 = new Date();
	diff  = new Date();
	//new Date("jour, mois date année heures:minutes:secondes") 

	if (isValidDateComp(varDate1)) { // Validates first date
		datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
		matchArray = varDate1.match(datePat);
		month = matchArray[3];
		day = matchArray[1];
		year = matchArray[4];
		date1temp = new Date(month + "," + day + "," + year + ",00:00:00");
		date1.setTime(date1temp.getTime());
	}
	else return false; // otherwise exits

	if (isValidDateComp(varDate2)) { // Validates second date
		datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
		matchArray = varDate2.match(datePat);
		month = matchArray[3];
		day = matchArray[1];
		year = matchArray[4];
		date2temp = new Date(month + "," + day + "," + year + ",00:00:00");
		date2.setTime(date2temp.getTime());
		//alert(date2);
	}
	else return false; // otherwise exits

	// sets difference date to difference of first date and second date

	diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
	timediff = diff.getTime();
	weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
	days = Math.floor(timediff / (1000 * 60 * 60 * 24));
	hours = Math.floor(timediff / (1000 * 60 * 60));
	mins = Math.floor(timediff / (1000 * 60));
	secs = Math.floor(timediff / 1000);
	if (varTime=="w") {
		return weeks;
	}
	if (varTime=="d") {
		return days;
	}
	if (varTime=="h") {
		return hours;
	}
	if (varTime=="m") {
		return mins;
	}
	if (varTime=="s") {
		return secs;
	}
}