var EWA = new Object();
EWA.utils = {
	/**
	* Nettoyer une chaine des caractères alphabétiques, pour ne garder qu'un nombre floatant
	*/
	strToFloat: function(s){
		var ret;
		ret = s;
		ret.trim();
		if(ret == '') {
			ret = '0'; //on reste sur une chaine pour les regexp
		}
		ret = ret.replace(/,/, '.');
		ret = ret.replace(/\s/, '');
		ret = ret.replace(/[^0-9\.]/g, '');
		ret = ret.replace(/\.(?=(.*\.))/g, '');
		if(ret == '') { //il ne reste plus rien, 0
			ret = 0;
		}
		//if (window.console) { console.log('PArsing float '+ ret + ' parsed = ' + parseFloat(ret)); }
		return parseFloat(ret);
	},
	
	/**
	* Nettoyer un champ texte pour ne garde qu'un nombre flottant comme valeur
	*/
	cleanUpNumField: function(input){
		if ($defined(input)) {
			input.value = EWA.utils.strToFloat(input.getValue());
		}
	},
	
	/**
	* Passer tout le contenu d'un champ texte en majuscule 
	*/
	fieldToUpper: function(input) {
		input.value = input.value.toUpperCase();
	},
	
	/**
	* Limiter le nombre de caractères saisis dans un champ
	*/
	fieldLimitLength: function(input, length) {
		input.value = input.value.truncate(length, ''); //requiert prototype
	},
	/**
	* Limiter le nombre de caractères saisis dans un champ
	*/
	fieldRemoveNonNumeric: function(input) {
		input.value = input.value.replace(/[^0-9\.]/g, '');
	},
	

	/**
	 * Comparer des dates au format jj/mm/aaa
	 * @return int nombre de jours, négatif si sDate1 est postérieure à sDate2
	 */
	compareDatesFrSlash: function(sDate1, sDate2) {
			if (window.console) console.log('compareDatesFrSlash with params '+ sDate1 + '  and ' + sDate2);
		var dt1 = sDate1.split('/');
		var dt2 = sDate2.split('/');
		
		if(dt1.length < 2 || dt2.length < 2) return false;
		var date1 = new Date();
		var date2 = new Date();
		
		date1.setFullYear(dt1[2], dt1[1]-1, dt1[0]);
		date2.setFullYear(dt2[2], dt2[1]-1, dt2[0]);
		if (window.console) console.log('compareDatesFrSlash with parsed dates '+ date1 + '  and ' + date2);
		return EWA.utils.compareDates(date1, date2);
	},
	/**
	 * Différence en joure entre dt1 et dt2
	 * @return int nombre de jours, négatif si dt1 est postérieure à dt2
	 */
	compareDates: function(dt1, dt2) {
		return Math.round((dt2-dt1)/(1000*60*60*24));
	}, 
	/**
	 * Adapté depuis http://actuel.fr.selfhtml.org/articles/javascript/bbcode/exemple.htm
	 * Insérer un texte à l'emplacement sélectionné dans une textarea
	 */
	textareaInsert: function (elemId, repdeb, repfin) {
		var input = $(elemId);//document.forms['formulaire'].elements['saisie'];
		input.focus();
		/* pour l'Explorer Internet  */
		if(typeof document.selection != 'undefined') {
			/* Insertion du code de formatage */
			var range = document.selection.createRange();
			var insText = range.text;
			range.text = repdeb + insText + repfin;
			/* Ajustement de la position du curseur  */
			range = document.selection.createRange();
			if (insText.length == 0) {
				range.move('character', -repfin.length);
			} else {
				range.moveStart('character', repdeb.length + insText.length + repfin.length);
			}
			range.select();
		}
		/* pour navigateurs plus récents basés sur Gecko */
		else if(typeof input.selectionStart != 'undefined')
		{
			/* Insertion du code de formatage  */
			var start = input.selectionStart;
			var end = input.selectionEnd;
			var insText = input.value.substring(start, end);
			input.value = input.value.substr(0, start) + repdeb + insText + repfin + input.value.substr(end);
			/* Ajustement de la position du curseur  */
			var pos;
			if (insText.length == 0) {
				pos = start + repdeb.length;
			} else {
				pos = start + repdeb.length + insText.length + repfin.length;
			}
			input.selectionStart = pos;
			input.selectionEnd = pos;
		}
		/* pour les autres navigateurs  */
		else
		{
			/* requête de la position d'insertion  */
			var pos;
			var re = new RegExp('^[0-9]{0,3}$');
			while(!re.test(pos)) {
				pos = prompt("Insertion à la position (0.." + input.value.length + "):", "0");
			}
			if(pos > input.value.length) {
				pos = input.value.length;
			}
			/* Insertion du code de formatage  */
			var insText = prompt("Veuillez entrer le texte à formater:");
			input.value = input.value.substr(0, pos) + repdeb + insText + repfin + input.value.substr(pos);
		}
	},
	validateEmail: function(email) {
		r = email.match(/^[A-Za-z0-9_.-]+@([A-Za-z0-9_-]+\.)+[A-Za-z]{2,4}$/)!=null;
		return r;
	},
	addSlashes: function (str) {
		str=str.replace(/\'/g,'\\\'');
		str=str.replace(/\"/g,'\\"');
		str=str.replace(/\\/g,'\\\\');
		str=str.replace(/\0/g,'\\0');
		return str;
	},
	stripSlashes: function(str) {
		str=str.replace(/\\'/g,'\'');
		str=str.replace(/\\"/g,'"');
		str=str.replace(/\\\\/g,'\\');
		str=str.replace(/\\0/g,'\0');
		return str;
	},
	openCenteredWindow: function(theURL,winName,width,height,features) { //v2.0
		if (!width || width == 'undefined') {
			var width  = screen.width;
		}
		if (!height || height == 'undefined') {
			var height  = screen.height;
		}
		if (!features || features == 'undefined') {
			
		}
		
		var top=(screen.height-height)/2;
		var left=(screen.width-width)/2;
		var params = "top="+top+",left="+left+",width="+width+",height="+height;
		
		if (features && features != 'undefined') {
			params += ","+features;
		}
		
		var dbg = 'url = ' + theURL   + '\nname= = ' + winName + ' \nparams =  ' + params;
	//	if (window.console) { console.log(dbg) } else { alert(dbg) }
		
		window.open(theURL,winName,params);
	}
}