DomUtils = {
	// select functions
	/* generateSelectOptions(select, sourceArray)
			- select : reference à un select
			- sourceArray : tableau de la forme : 
				[
					{text:'texte', value:'valeur'},
					{text:'texte', value:1}
				]
	*/
	generateSelectOptions : function(select, sourceArray) {
	if(select && sourceArray){
		sourceArray.each(function(obj){
			if (obj) {
				select.adopt(new Element('option', {
					'html' : obj.text,
					'value' : obj.value
				}));
			}
		});
		
		//ugly fix for IE7 cause select is reduced when all options inside are changed :(
		if (document.all && /MSIE 7/.test(navigator.userAgent)) select.style.zoom = 1-select.style.zoom;
		}
	},
	
	selectByValue : function(select, value) {
		for (var i=0; i<select.options.length; i++) {
			var option = select.options[i];
			if (option.value == value) {
				option.selected = true;
				break;
			}
		} 
	},
	
	getFormattedTodayDate : function() {
		var d = new Date();
		return this.zeroFills10(d.getDate())+'/'+this.zeroFills10(d.getMonth()+1)+'/'+d.getFullYear();
	},
	
	getFormattedTodayDate : function(format) {
		var d = new Date();
		if (format == 'MM/dd/yyyy') {
			return this.zeroFills10(this.zeroFills10(d.getMonth()+1)+'/'+d.getDate()+'/'+d.getFullYear());
		}
		if (format == 'yyyy/MM/dd') {
			return this.zeroFills10(d.getFullYear()+'/'+this.zeroFills10(d.getMonth()+1)+'/'+d.getDate());
		}
		if (format == 'yyyy/dd/MM') {
			return this.zeroFills10(d.getFullYear()+'/'+this.zeroFills10(d.getDate())+'/'+d.getMonth()+1);
		}
		return this.zeroFills10(d.getDate())+'/'+this.zeroFills10(d.getMonth()+1)+'/'+d.getFullYear();
	},
	
	getFormattedTodayDate2 : function(format, delay) { 
		if (delay=='undefined' || delay=='' || isNaN(delay)) return this.getFormattedTodayDate(format);
		var d = new Date();
		d.setDate(parseInt(delay) + parseInt(d.getDate()));
		if (format == 'MM/dd/yyyy') {
			return this.zeroFills10(d.getMonth()+1)+'/'+this.zeroFills10(d.getDate())+'/'+d.getFullYear();
		}
		if (format == 'yyyy/MM/dd') {
			return d.getFullYear()+'/'+this.zeroFills10(d.getMonth()+1)+'/'+this.zeroFills10(d.getDate());
		}
		if (format == 'yyyy/dd/MM') {
			return d.getFullYear()+'/'+this.zeroFills10(d.getDate())+'/'+this.zeroFills10(d.getMonth()+1);
		}
		return this.zeroFills10(d.getDate())+'/'+this.zeroFills10(d.getMonth()+1)+'/'+d.getFullYear();
	},

	getFormattedDate : function(dateStr, format) {
		var date = dateStr.split('/');
		var d;
		if (format == 'yyyy/MM/dd') {
			d = new Date(parseInt(date[0],10), parseInt(date[1]-1,10), parseInt(date[2],10));
		} else if (format == 'MM/dd/yyyy') {
			d = new Date(parseInt(date[2],10), parseInt(date[0]-1,10), parseInt(date[1],10));
		} else {
			d = new Date(parseInt(date[2],10), parseInt(date[1]-1,10), parseInt(date[0],10));
		}
		return d;
	},
	
	zeroFills10 : function(val) {
		if (val<10) return '0'+val;
		return val;
	},
	
	checkDateFormat : function(dateStr) {
		var date = dateStr.split('/');
		if ( !this.validDateElements(date) ) return false;
		var d = new Date(parseInt(date[2],10), parseInt(date[1]-1,10), parseInt(date[0],10));
			if (!this.isValidDateObject(d)) return false;
		return (d.getFullYear()==parseInt(date[2],10) && d.getMonth()+1==parseInt(date[1],10) && d.getDate()==parseInt(date[0],10));
	},
	
	checkDateFormat : function(dateStr, formatDate) {
		var date = dateStr.split('/');
		if ( !this.validDateElements(date, formatDate) ) return false;
		if (formatDate == 'yyyy/MM/dd') {
			var d = new Date(parseInt(date[0],10), parseInt(date[1]-1,10), parseInt(date[2],10));
			if (!this.isValidDateObject(d)) return false;
			return (d.getFullYear()==parseInt(date[0],10) && d.getMonth()+1==parseInt(date[1],10) && d.getDate()==parseInt(date[2],10));
		} else if (formatDate == 'MM/dd/yyyy') {
			var d = new Date(parseInt(date[2],10), parseInt(date[0]-1,10), parseInt(date[1],10));
			if (!this.isValidDateObject(d)) return false;
			return (d.getFullYear()==parseInt(date[2],10) && d.getMonth()+1==parseInt(date[0],10) && d.getDate()==parseInt(date[1],10));
		}
		// par defaut : dd/MM/yyyy
		var d = new Date(parseInt(date[2],10), parseInt(date[1]-1,10), parseInt(date[0],10));
			if (!this.isValidDateObject(d)) return false;
		return (d.getFullYear()==parseInt(date[2],10) && d.getMonth()+1==parseInt(date[1],10) && d.getDate()==parseInt(date[0],10));
	},
	
	isValidDateObject : function (d) {
		if ( Object.prototype.toString.call(d) !== "[object Date]" )
			return false;
		return !isNaN(d.getTime());
	},
	
	// this function takes the splitted date
	// and checks that all elements are correct
	validDateElements : function (d, formatDate) {
		if (typeof d == 'undefined' || d==null || d.length != 3) return false;
		if (formatDate  &&  formatDate!=null)  {
			var idx = formatDate.indexOf('yyyy');
			(idx==6) ? idx=2 : (idx==3)?idx=1:'';
			if (d[idx].length != 4) return false;
		}
		return !isNaN(d[0]) && !isNaN(d[1]) && !isNaN(d[2]);
	},
	
	inputChangeDeleteHandler : function() {
		if (!this.oldValue) this.oldValue = this.value;
		this.onblur = function() {
			if (this.value=='') this.value = this.oldValue;
		};
		this.onfocus = function() {
			if (this.value==this.oldValue) this.value = '';
		};
		this.onfocus();
	},
	
	isEmptyToReplace : function(str1, str2) {
		if (str1 != undefined  &&  str1 != '') {
			return str1;
		} else {
			return str2;
		}
		return '';
	}
}