/* Project : Visitadom 2.0
*  Author  : PL
*  History : 2009-05-31 Original version
*
*  Object : Library of PHP functions
*/
var xmlHttp;

var createXMLHttpRequest = function() {
	if(window.ActiveXObject) {
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	} else if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	}
};

function Ltrim(Chaine) {
	var Cars = 0;
	var NbCar = Chaine.length;
	while(Chaine.charAt(Cars) == ' ') { Cars++; }
	return Chaine.substring(Cars, NbCar);
}

function Rtrim(Chaine) {
	var NbCar = Chaine.length;
	while(Chaine.charAt(NbCar-1) == ' ') { NbCar--; }
	return Chaine.substring(0, NbCar);
}

function errorEmpty(Chaine) {
	if(Chaine.length == 0) { return true; } else { return false; }
}

function errorInteger(Chaine) {
	var err = false;
	var pattern = new RegExp("^[0-9]+$", "g");
	if(!pattern.test(Chaine)) { err = true; }
	return err;
}

function errorDecimal(Chaine, Nbre) {
	var err = false;
	var expr = "^[0-9]+[\.\,]?[0-9]{0," + Nbre + "}$";
	var pattern = new RegExp(expr, "g");
	if(!pattern.test(Chaine)) { err = true; }
	return err;
}

function errorEmail(Chaine) {
	var err = false;
	var pattern = new RegExp("^[_a-zA-Z0-9\-]+[_a-zA-Z0-9\.\-]*@[_a-zA-Z0-9\-]+[\.][_a-zA-Z\.\-]{1,}[_a-zA-Z\-]+", "g");
	if(!pattern.test(Chaine)) { err = true; }
	return err;
}

function errorFile(Chaine) {
	var err = false;
	var pattern = new RegExp("^[_/a-zA-Z0-9\.\-]+[\.][a-zA-Z0-9]{2,5}$", "g");
	if(!pattern.test(Chaine)) { err = true; }
	return err;
}

function errorUrl(Chaine) {
	var err = false;	
	var pattern = new RegExp("^(https?|ftp)://[-A-Za-z0-9_]+\\.[-A-Za-z0-9_%&\?\/.=]+$", "g");
	
	if(!pattern.test(Chaine)) { err = true; }
	return err;
}

function errorVariable(Chaine, Min, Max) {
	var err = false;
	var expr = "^[_a-zA-Z0-9\.\-]{"+ Min + "," + Max + "}$";
	var pattern = new RegExp(expr, "g");
	if(!pattern.test(Chaine)) { err = true; }
	return err;
}

function errorTel(Chaine) {
	// (international format)
	var err = false;
	var pattern = new RegExp("^[0-9\(\). \+\-]+$", "g");
	if(!pattern.test(Chaine)) { err = true; }
	return err;
}

function errorPostalCode(Chaine) {
	// (international format)
	var err = false;
	var pattern = new RegExp("^[a-zA-Z0-9 \-]{4,10}$", "g");
	if(!pattern.test(Chaine)) { err = true; }
	return err;
}

function errorDate(dateFormat, Chaine) {
	var err = false;
	if(dateFormat == "fr") {
		var pattern = new RegExp("^([0-9]{1,2}/[0-9]{1,2}/[0-9]{4})$", "g");
	} else {
		var pattern = new RegExp("^([0-9]{4}[\-][0-9]{1,2}[\-][0-9]{1,2})$", "g");
	}
	if(!pattern.test(Chaine)) { err = true; }
	// Additional controls for day, month and year format
	if(err == false) {
		if(dateFormat == "fr") {
			var part = Chaine.split("/");
			var jr = eval(part[0]);
			var ms = eval(part[1]);
			var an = eval(part[2]);
		} else {
			var part = Chaine.split("/");
			var jr = eval(part[2]);
			var ms = eval(part[1]);
			var an = eval(part[0]);
		}
	}
	// month must be comprised between 1 and 12
	if(err == false) {
		if(ms < 1 || ms > 12) { err = true; }
	}
	// year must be comprised between 1900 and 2099
	if(err == false) {
		if(an < 1900 || an > 2099) { err = true; }
	}
	// number of days (28, 29, 30 or 31, according to the month and the year)
	if(err == false) {
		var nb_jrs;
		switch(ms) {
			case 4:
			case 6:
			case 9:
			case 11:
			nb_jrs = 30;
			break;
			case 2:
			if(an/4 == Math.round(an/4)) { nb_jrs = 29; } else { nb_jrs = 28; }
			break;
			default:
			nb_jrs = 31;
			break;
		}
		// day must be comprised between 1 and 28, 29, 30 or 31 days
		if(jr < 1 || jr > nb_jrs) { err = true; }
	}
	return err;
}

function compareDates(dateFormat, startDate, endDate) {
	// End Date must be superior or equal to Start Date
	var err = false;
	var debut = "";
	var fin = "";
	if(dateFormat == "fr") {
		var tmp = startDate.split("/");
		var jr = tmp[0];
		var ms = tmp[1];
		var an = tmp[2];
		// add initial zeros, eventually
		if(jr.length==1) {jr = "0" + jr;}
		if(ms.length==1) {ms = "0" + ms;}
		// concatenation of year, month and day
		debut = an + ms + jr;
		tmp = endDate.split("/");
		jr = tmp[0];
		ms = tmp[1];
		an = tmp[2];
		// add initial zeros, eventually
		if(jr.length==1) {jr = "0" + jr;}
		if(ms.length==1) {ms = "0" + ms;}
		// concatenation of year, month and day
		fin = an + ms + jr;
	} else {
		var tmp = startDate.split("-");
		var jr = tmp[2];
		var ms = tmp[1];
		var an = tmp[0];
		// add initial zeros, eventually
		if(jr.length==1) {jr = "0" + jr;}
		if(ms.length==1) {ms = "0" + ms;}
		// concatenation of year, month and day
		debut = an + ms + jr;
		tmp = endDate.split("-");
		jr = tmp[2];
		ms = tmp[1];
		an = tmp[0];
		// add initial zeros, eventually
		if(jr.length==1) {jr = "0" + jr;}
		if(ms.length==1) {ms = "0" + ms;}
		// concatenation of year, month and day
		fin = an + ms + jr;
	}
	// calculation of the number of days, must be positive
	if(eval(fin) < eval(debut)) {
		err = true;
	}
	return err;
}

// E-mail encoding (for antispam)
function encryptEmail (username, domain, texte) {
	var email_enc = '';
	var aro = '%40';
	var my_email = domain;
	my_email = (username + unescape(aro) + my_email);
	if(texte) {
		email_enc = '<a href="mailto:' + my_email + '">' + texte + '</a>';
	} else {
		email_enc = '<a href="mailto:' + my_email + '">' + my_email + '</a>';
	}
	return email_enc;
}

// Roll overs
Im1a = new Image(); Im1b = new Image();
Im2a = new Image(); Im2b = new Image();
Im1a.src = "images/back-off.png"; Im1b.src = "images/back-on.png";
Im2a.src = "images/plus-off.png"; Im2b.src = "images/plus-on.png";

function onOver(num) {
	document.images['m'+ num].src = eval('Im'+ num +'b.src');
}
function onOut(num) {
	document.images['m'+ num].src = eval('Im'+ num +'a.src');
}
