/**
 * format a string given a locale, a date and a format
 */
function datePrintf(date, locale, format)
{
    var days = new Array();
    var daysShort = new Array();
    var month = new Array();
    var monthShort = new Array();

    /* english */
    days[4] = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
    daysShort[4] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
    month[4] = ["January", "February", "March", "April", "May", "June", "July", 
		"Augustus", "September", "Octobre", "Novembre", "December"];
    monthShort[4] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

    /* french */
    days[5] = ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"];
    daysShort[5] = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"];
    month[5] = ["Janvier", "F&eacute;vrier", "Mars", "Avril", "Mai", "Juin", "Juillet",
		"Août", "Septembre", "Octobre", "Novembre",  "D&eacute;cembre"];
    monthShort[5] = ["Jan", "F&eacute;v", "Mar", "Avr", "Mai" , "Juin", "Juil", "Août", "Sep", "Oct", "Nov", "D&eacute;c"];

    var i;
    var ret = new String("");

    for (i = 0; i < format.length; i++) {
	var c = format.charAt(i);

	if (c == "%") {
	    c = format.charAt(++i);
	    switch (c) {
	    case '%':
		ret += '%';
		break;
		/* am or pm */
	    case 'a':
		if (date.getHours() < 12)
		    ret += "am";
		else
		    ret += "pm";
		break;
		/* AM or PM */
	    case 'A':
		if (date.getHours() < 12)
		    ret += "AM";
		else
		    ret += "PM";
		break;
		/* day of month with leading zero */
	    case 'd':
		var day = date.getDate();
		if (day < 10)
		    ret += "0";
		ret += day;
		break;
		/* name of the day short */
	    case 'D':
		ret += daysShort[locale][date.getDay()];
		break;
		/* name of the month */
	    case 'F':
		ret += month[locale][date.getMonth()];
		break;
		/* hour from 0 to 12 without leading zeros */
	    case 'g':
		ret += (date.getHours() % 12);
		break;
	    case 'G':
		/* hour from 0 to 24 without leading zeros */
		ret += date.getHours();
		break;
	    case 'h':
		/* hour from 0 to 12 with leading zeros */
		var h = date.getHours() % 12;
		if (h < 10)
		    ret += "0";
		ret += h;
		break;
	    case 'H':
		/* hour from 0 to 24 with leading zeros */
		var h = date.getHours();
		if (h < 10)
		    ret += "0";
		ret += h;
		break;
	    case 'i':
		/* minutes with leading 0 */
		var m = date.getMinutes();
		if (m < 10)
		    ret += "0";
		ret += m;
		break;
	    case 'I':
		/* minutes without leading 0 */
		ret += date.getMinutes();
		break;
	    case 'l':
		/* name of the day of the week full */
		ret += days[locale][date.getDay()];		
		break;
	    case 'm':
		/* month with leading 0 */
		var m = date.getMonth()+1;
		if (m < 10)
		    ret += "0";
		ret += m;
		break;
	    case 'M':
		/* name of the month short */
		ret += monthShort[locale][date.getMonth()];
		break;
	    case 'n':
		/* month without leading 0 */
		ret += date.getMonth();
		break;
	    case 'r':
		/* utc */
		ret += date.toUTCString();
		break;
	    case 's':
		/* second with leading 0 */
		var s = date.getSeconds();
		if (s < 10)
		    ret += "0";
		ret += s;
		break;
	    case 'S':
		/* suffix for the day of the month */
		break;
	    case 'w':
		ret += date.getDay();
		break;
	    case 'Y':
		ret += date.getFullYear();
		break;
	    case 'y':
		ret += date.getFullYear() % 100;
		break;
	    }
	} else {
	    ret += c;
	}
    }

    return ret;
}
                                                                                                                        

