/* Project : dlxManager v.1.0
*  Author  : PL
*  History : 2010-08-31 Original version
*
*  Subject : Librairie de fonctions Javascript
*/
var xmlHttp;

var border_normal = '#757575';
var border_red = '#dc0f0f';

/***** Texte par défaut dans textboxes *****/
var efface = function(obj, defaut_text) {
	obj.setStyles({ 'color': '#4a4a4a', 'font-style': 'normal' });
	if(obj.value == defaut_text) { obj.value = ""; };
};

var initStyle = function(obj, default_text) {
	if(obj.value == "") { obj.value = default_text; };
	if(obj.value == default_text) {
		obj.setStyles({ 'color': '#aaa', 'font-style': 'italic' });
	};
};

/***** Contrôle des formulaires *****/
function err_required(Chaine) {
	if(Chaine.length == 0) { return true; } else { return false; }
}

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

function err_decimal(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 err_email(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 err_file(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 err_url(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 err_variable(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 err_alpha(Chaine, Min, Max) {
	var err = false;
	if(Min == 0 && Max == 0) {
		var expr = "^[a-zA-Z]+$";
	} else {
		var expr = "^[a-zA-Z]{"+ Min + "," + Max + "}$";
	}
	var pattern = new RegExp(expr, "g");
	if(!pattern.test(Chaine)) { err = true; }
	return err;
}

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

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

function err_zipcode(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 err_year(Chaine) {
	// (year with 4 digits)
	var err = false;
	var pattern = new RegExp("^[0-9]{4}$", "g");
	if(!pattern.test(Chaine)) { err = true; }
	if(err == false) {
		if(Chaine < 1900 || Chaine > 2099) { err = true; }
	}
	return err;
}

function err_date(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 compare_dates(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)
var encryptEmail = function(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;
};

var inObject = function(value, object, property) {
	var existe = false;
	for(var i=0; i<object.length; i++) {
		if(object[i][property] === value) {
			existe = true; break;
		}
	}
	return existe;
};
	
var html_entity_decode = function(string, quote_style) {
	// Convert all HTML entities to their applicable characters  
	var hash_map = {}, symbol = '', tmp_str = '', entity = '';
	tmp_str = string.toString();
	
	if (false === (hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style))) {
		return false;
	}
	// fix &amp; problem
	hash_map['&'] = '&amp;';
	for (symbol in hash_map) {
		entity = hash_map[symbol];
		tmp_str = tmp_str.split(entity).join(symbol);
	}
	tmp_str = tmp_str.split('&#039;').join("'");
	
	return tmp_str;
};
	
var get_html_translation_table = function(table, quote_style) {
	// Returns the internal translation table used by htmlspecialchars and htmlentities  
	var entities = {}, hash_map = {}, decimal = 0, symbol = '';    var constMappingTable = {}, constMappingQuoteStyle = {};
	var useTable = {}, useQuoteStyle = {};
	
	// Translate arguments
	constMappingTable[0]      = 'HTML_SPECIALCHARS';    constMappingTable[1]      = 'HTML_ENTITIES';
	constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
	constMappingQuoteStyle[2] = 'ENT_COMPAT';
	constMappingQuoteStyle[3] = 'ENT_QUOTES';
	useTable       = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
	useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';
	
	if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
	  throw new Error("Table: "+useTable+' not supported');        // return false;
	}
	
	entities['38'] = '&amp;';
	if (useTable === 'HTML_ENTITIES') {
		entities['160'] = '&nbsp;';
		entities['161'] = '&iexcl;';
		entities['162'] = '&cent;';
		entities['163'] = '&pound;';
		entities['164'] = '&curren;';
		entities['165'] = '&yen;';
		entities['166'] = '&brvbar;';
		entities['167'] = '&sect;';
		entities['168'] = '&uml;';
		entities['169'] = '&copy;';
		entities['170'] = '&ordf;';
		entities['171'] = '&laquo;';
		entities['172'] = '&not;';
		entities['173'] = '&shy;';
		entities['174'] = '&reg;';
		entities['175'] = '&macr;';
		entities['176'] = '&deg;';
		entities['177'] = '&plusmn;';
		entities['178'] = '&sup2;';
		entities['179'] = '&sup3;';
		entities['180'] = '&acute;';
		entities['181'] = '&micro;';
		entities['182'] = '&para;';
		entities['183'] = '&middot;';
		entities['184'] = '&cedil;';
		entities['185'] = '&sup1;';
		entities['186'] = '&ordm;';
		entities['187'] = '&raquo;';
		entities['188'] = '&frac14;';
		entities['189'] = '&frac12;';
		entities['190'] = '&frac34;';
		entities['191'] = '&iquest;';
		entities['192'] = '&Agrave;';
		entities['193'] = '&Aacute;';
		entities['194'] = '&Acirc;';
		entities['195'] = '&Atilde;';
		entities['196'] = '&Auml;';
		entities['197'] = '&Aring;';
		entities['198'] = '&AElig;';
		entities['199'] = '&Ccedil;';
		entities['200'] = '&Egrave;';
		entities['201'] = '&Eacute;';
		entities['202'] = '&Ecirc;';
		entities['203'] = '&Euml;';
		entities['204'] = '&Igrave;';
		entities['205'] = '&Iacute;';
		entities['206'] = '&Icirc;';
		entities['207'] = '&Iuml;';
		entities['208'] = '&ETH;';
		entities['209'] = '&Ntilde;';
		entities['210'] = '&Ograve;';
		entities['211'] = '&Oacute;';
		entities['212'] = '&Ocirc;';
		entities['213'] = '&Otilde;';
		entities['214'] = '&Ouml;';
		entities['215'] = '&times;';
		entities['216'] = '&Oslash;';
		entities['217'] = '&Ugrave;';
		entities['218'] = '&Uacute;';
		entities['219'] = '&Ucirc;';
		entities['220'] = '&Uuml;';
		entities['221'] = '&Yacute;';
		entities['222'] = '&THORN;';
		entities['223'] = '&szlig;';
		entities['224'] = '&agrave;';
		entities['225'] = '&aacute;';
		entities['226'] = '&acirc;';
		entities['227'] = '&atilde;';
		entities['228'] = '&auml;';
		entities['229'] = '&aring;';
		entities['230'] = '&aelig;';
		entities['231'] = '&ccedil;';
		entities['232'] = '&egrave;';
		entities['233'] = '&eacute;';
		entities['234'] = '&ecirc;';
		entities['235'] = '&euml;';
		entities['236'] = '&igrave;';
		entities['237'] = '&iacute;';
		entities['238'] = '&icirc;';
		entities['239'] = '&iuml;';
		entities['240'] = '&eth;';
		entities['241'] = '&ntilde;';
		entities['242'] = '&ograve;';
		entities['243'] = '&oacute;';
		entities['244'] = '&ocirc;';
		entities['245'] = '&otilde;';
		entities['246'] = '&ouml;';
		entities['247'] = '&divide;';
		entities['248'] = '&oslash;';
		entities['249'] = '&ugrave;';
		entities['250'] = '&uacute;';
		entities['251'] = '&ucirc;';
		entities['252'] = '&uuml;';
		entities['253'] = '&yacute;';
		entities['254'] = '&thorn;';
		entities['255'] = '&yuml;';
	}
	if (useQuoteStyle !== 'ENT_NOQUOTES') {
		entities['34'] = '&quot;';
	}
	if (useQuoteStyle === 'ENT_QUOTES') {
		entities['39'] = '&#39;';
	}
	entities['60'] = '&lt;';    entities['62'] = '&gt;';
	
	// ascii decimals to real symbols
	for (decimal in entities) {        symbol = String.fromCharCode(decimal);
	  hash_map[symbol] = entities[decimal];
	}
	return hash_map;
};