Object.extend(Salto.CallbackUtils, {
	isLoginPage:function(transport, contentType)
	{	
		try
		{
			var text = transport.responseText;
			if(text)
			{
				if(contentType.indexOf("text/html")!=-1 && 
					(text.indexOf("\"smauthreason\"")!=-1 
					|| text.indexOf("__FWK_LOGIN_PAGE__")!=-1
					|| (text.indexOf("You will be forwarded to continue the authorization process.")!=-1
						&& text.indexOf("\"SMPostPreserve\"")!=-1)
						))
				{
					return true;
				}
			}
			if(contentType.indexOf("text/html")!=-1 && transport.status == 302)
			{	
				return true;
			}
			return false;
		}
		catch(e)
		{
			return true;
		}
	}	
});
	
	
var Decathlon = {
	Version: '3.2.0'
};

Decathlon.CalendarUtils = Class.create();
Object.extend(Decathlon.CalendarUtils, {
	/** 
	 * Decathlon algorithm for Week numbers computation 
	 * @param when The date for which computation is required
	 * @param theCalendar The calendar object
	 */		
	customWeekNumberCallbackForCalendar: function (when, theCalendar) 
	{	
		return Decathlon.CalendarUtils.customWeekNumberCallback(when, {firstDayOfWeek:theCalendar.firstDayOfWeek});
	},
	/** 
	 * Decathlon algorithm for Week numbers computation 
	 * @param when The date for which computation is required
	 * @param options [Object] firstDayOfWeek number first day of week
	 */		
	customWeekNumberCallback: function (when, options) 
	{
		try
		{
			var firstDayOfWeek = options.firstDayOfWeek;
			var minimalDaysInFirstWeek = 3;
			var year = when.getFullYear();
			var month = when.getMonth();
			var day = when.getDate();
			var dayOfYear = ((Date.UTC(year,when.getMonth(),when.getDate(),0,0,0) - Date.UTC(year,0,1,0,0,0)) /1000/60/60/24) + 1;
			var dayOfWeek = when.getDay();
			var relDow = (dayOfWeek + 7 - firstDayOfWeek) % 7;
			var relDowJan1 = (dayOfWeek - dayOfYear + 701 - firstDayOfWeek) % 7;
			var woy = Math.floor((dayOfYear - 1 + relDowJan1) / 7);
			if ((7 - relDowJan1) >= minimalDaysInFirstWeek) {
				++woy;
			}
			if (dayOfYear > 359) {
				var lastDoy = when.getYearLength();
				var lastRelDow = (relDow + lastDoy - dayOfYear) % 7;
				if (lastRelDow < 0) {
					lastRelDow += 7;
				}
				if (((6 - lastRelDow) >= minimalDaysInFirstWeek) && ((dayOfYear + 7 - relDow) > lastDoy)) {
					woy = 1;
				}
			}
			else if (woy === 0) {
				// Derniere semaine de l'annee precedente
				var yearBefore = new Date(year-1,month,day,0,0,0);
				var prevDoy = dayOfYear + yearBefore.getYearLength();
				var periodStartDayOfWeek = (dayOfWeek - firstDayOfWeek - prevDoy + 1) % 7;
				if (periodStartDayOfWeek < 0) {
					periodStartDayOfWeek += 7;
				}
				var weekNo = Math.floor((prevDoy + periodStartDayOfWeek - 1) / 7);
				if ((7 - periodStartDayOfWeek) >= minimalDaysInFirstWeek) {
					++weekNo;
				}
				woy = weekNo;
			}
			return woy;
		}
		catch(e)
		{
			alert('calendar-setup.js:getDktWeekNumber:Error computing week number:'+e);
		}
	},
	/**
	 * Factory method for Decathlon DateHelper
	 * @return [Salto.DateHelper] 
	 */
	createDateHelper:function()
	{
		return new Salto.DateHelper({getWeekNumberFromDateCallback:Decathlon.CalendarUtils.customWeekNumberCallback,
			firstDayOfWeek:0});
	}
});

// Specific definition of functions for Decathlon
Salto.CalendarHelper.customWeekNumberCallbackForCalendar = Decathlon.CalendarUtils.customWeekNumberCallbackForCalendar;
Salto.CalendarHelper.customWeekNumberCallback = Decathlon.CalendarUtils.customWeekNumberCallback;