vanilla.namespace('vanilla.text');
vanilla.text =
{
    trim : function(s)
    {
	if ( typeof s != "string" )
	{
	    return s;       
	} 

	var start   = 0;
	var length  = s.length;

	while ( (start < length) && (s.charAt(start) <= ' ') ) 
	{
	    start++;
	}

	while ( (start < length) && (s.charAt(length - 1) <= ' ') ) 
	{
	    length--;
	}

	return ( start > 0 || length < s.length ? s.substring(start, length) : s);
    },

    DefaultDateFormat : 'mm/dd/yyyy',
    parseDate : function(s, format)
    {
	if ( !s )
	{
	    return null;
	}

	if ( !format )
	{
	    format = this.DefaultDateFormat;
	}

	if ( s.length != format.length )
	{
	    // invalid date
	    return null;
	}

	var dayS    = new String();
	var monthS  = new String();
	var yearS   = new String();

	for ( var i = 0 ; i < format.length ; i++ )
	{
	    switch ( format.charAt(i) )
	    {
		case 'd' : dayS += s.charAt(i); break;
		case 'm' : monthS += s.charAt(i); break;
		case 'y' : yearS += s.charAt(i); break;
		default : 
		{
		    // separator
		    if ( format.charAt(i) != s.charAt(i) )
		    {
			return null;
		    }
		}
	    }
	}

	var day	    = parseInt(dayS, 10);
	var month   = parseInt(monthS, 10) - 1;
	var year    = parseInt(yearS, 10);

	var date    = new Date(year, month, day);

	/*
	 * On vérifie la date
	*/

	if ( date.getDate() != day || date.getMonth() != month || (year.length == 2 ? date.getYear() : date.getFullYear()) != year )
	{
	    return null;
	}

	return date;
    },

    replaceAll : function(s, reg, replacement)
    {
	return s.replace(new RegExp(reg, 'g'), replacement);
    }
};

