/* Spécifications : Definition des objets gérant l'objet date */
/* Auteur : Xavier VINCENT */
/* Date : 20/12/2002 */
	
var g_tid = 0;
var cF , cW;
var g_cD , g_iC , g_htm, g_test = false;
var value_temporary;
var date1 , date2;
var testFirstTime = true;
var testFirstTimeTheDate = false;

var premierjourdelasemaine = 1; // Lundi
var dernierjourdelasemaine = 0; // Dimanche

function PutZero( AnyNumber ) {
	strn = new String();
	if ( ('' + AnyNumber).length == 1 ) {
		strn = '0' + AnyNumber;
	}
	else 
		strn = '' + AnyNumber;
	return strn;	
}

function valuePart( mydate , datepart , namefield_value ) {
	eval( 'value_temporary_' + namefield_value + ' = \'' + Date2String( mydate ) + '\';' );
	switch ( datepart ) {
		case 'DAY' :
		case 'D' :
			return PutZero(mydate.getDate());
			break;
		case 'WEEK' :
		case 'W' :
			return '';
			break;
		case 'MONTH' :
		case 'M' :
			return PutZero(eval(mydate.getMonth() + '+1'));
			break;
		case 'YEAR' :
		case 'Y' :
			return mydate.getFullYear();
			break;
	}
}

function BuildDate( value , datepart ) {
	today = new Date();
	switch ( datepart ) {
		case 'DAY' :
		case 'D' :
			return new Date( today.getFullYear(), today.getMonth(), value );
			break;
		case 'WEEK' :
		case 'W' :
			return new Date( today.getFullYear() , today.getMonth(), today.getDate() );
			break;
		case 'MONTH' :
		case 'M' :
			return new Date( today.getFullYear(), value, today.getDate() );
			break;
		case 'YEAR' :
		case 'Y' :
			return new Date( value , today.getMonth(), today.getDate() );
			break;
	}
}

function ReturnDateToFormat( yyyy , mm , dd ) {
	var str = new String();
	if ( ReturnDateToFormat.arguments.length != 0 ) {
		switch ( ATCS_DATEFORMAT ) { 
			case 'ddmmyyyy' :
				str =  PutZero( dd ) + ATCS_DATESEPARATOR + PutZero( mm ) + ATCS_DATESEPARATOR + yyyy;
				break;
			case 'ddmmyy' :
				str =  PutZero( dd ) + ATCS_DATESEPARATOR +  PutZero( mm ) + ATCS_DATESEPARATOR + yyyy.substring(0,2);
				break;
			case 'mmddyyyy' :
				str = PutZero( mm ) + ATCS_DATESEPARATOR +  PutZero( dd ) + ATCS_DATESEPARATOR + yyyy;
				break;
			case 'mmddyy' :
				str = PutZero( mm ) + ATCS_DATESEPARATOR +  PutZero( dd ) + ATCS_DATESEPARATOR + yyyy.substring(0,2);
				break;
			case 'yyyymmdd' :
				str = yyyy + ATCS_DATESEPARATOR + PutZero( mm ) + ATCS_DATESEPARATOR + PutZero( dd );
				break;
			case 'yymmdd' :
				str = yyyy.substring(0,2) + ATCS_DATESEPARATOR + PutZero( mm ) + ATCS_DATESEPARATOR + PutZero( dd );
				break;
			default :
				str = PutZero( dd ) + ATCS_DATESEPARATOR + PutZero( mm ) + ATCS_DATESEPARATOR + yyyy;
		}
	}
	return str;
}

function Date2String( mydate ) {
	str = new String();
	switch ( ATCS_DATEFORMAT ) { 
		case 'ddmmyyyy' :
			str = 	PutZero(mydate.getDate()) + ATCS_DATESEPARATOR + PutZero(eval(mydate.getMonth() + '+1')) + ATCS_DATESEPARATOR + mydate.getFullYear();
			break;
		case 'ddmmyy' :
			str = PutZero(mydate.getDate()) + ATCS_DATESEPARATOR + PutZero(eval(mydate.getMonth() + '+1')) + ATCS_DATESEPARATOR + PutZero(mydate.getYear());
			break;
		case 'mmddyyyy' :
			str = PutZero(eval(mydate.getMonth() + '+1')) + ATCS_DATESEPARATOR + PutZero(mydate.getDate()) + ATCS_DATESEPARATOR + mydate.getFullYear();
			break;
		case 'mmddyy' :
			str = PutZero(eval(mydate.getMonth() + '+1')) + ATCS_DATESEPARATOR + PutZero(mydate.getDate()) + ATCS_DATESEPARATOR +PutZero( mydate.getYear());
			break;
		case 'yyyymmdd' :
			str = mydate.getFullYear() + ATCS_DATESEPARATOR + PutZero(eval(mydate.getMonth() + ' + 1')) + ATCS_DATESEPARATOR + PutZero(mydate.getDate());
			break;
		case 'yymmdd' :
			str = PutZero(mydate.getYear()) + ATCS_DATESEPARATOR + PutZero(eval(mydate.getMonth() + ' + 1')) + ATCS_DATESEPARATOR + PutZero(mydate.getDate());
			break;
	}
	return str;
}
	
function String2Date( StringValue ) {
	if ( '' + StringValue  == '' || '' + StringValue == 'undefined' || '' + StringValue == 'null' ) 
		return null
	switch ( ATCS_DATEFORMAT ) { 
		case 'ddmmyyyy' :
		case 'ddmmyy' :
		case 'mmddyyyy' :
		case 'mmddyy' :
			e = new RegExp("^[0-9]{1,2}" + ATCS_DATESEPARATOR + "[0-9]{1,2}" + ATCS_DATESEPARATOR + "([0-9]{2}|[0-9]{4})$");
			break;
		case 'yyyymmdd' :
		case 'yymmdd' :
			e = new RegExp("^([0-9]{2}|[0-9]{4})" + ATCS_DATESEPARATOR + "[0-9]{1,2}" + ATCS_DATESEPARATOR + "[0-9]{1,2}$");
			break;
	}
		
	if ( !e.test( StringValue ) )
		return null
			
	switch ( ATCS_DATEFORMAT ) { 
		case 'ddmmyyyy' :
		case 'ddmmyy' :
			j = parseInt(StringValue.split(ATCS_DATESEPARATOR)[0], 10); // jour
			m = parseInt(StringValue.split(ATCS_DATESEPARATOR)[1], 10); // mois
			a = parseInt(StringValue.split(ATCS_DATESEPARATOR)[2], 10); // année
			break;
		case 'mmddyyyy' :
		case 'mmddyy' :
			m = parseInt(StringValue.split(ATCS_DATESEPARATOR)[0], 10); // mois
			j = parseInt(StringValue.split(ATCS_DATESEPARATOR)[1], 10); // jour
			a = parseInt(StringValue.split(ATCS_DATESEPARATOR)[2], 10); // année
			break;
		case 'yyyymmdd' :
		case 'yymmdd' :
			a = parseInt(StringValue.split(ATCS_DATESEPARATOR)[0], 10); // année
			m = parseInt(StringValue.split(ATCS_DATESEPARATOR)[1], 10); // mois
			j = parseInt(StringValue.split(ATCS_DATESEPARATOR)[2], 10); // jour
			break;
	}	
		
	if ( a < 1000 ) {
		if ( a < 89 )
			a+=2000; // Si a < 89 alors on ajoute 2000 sinon on ajoute 1900
	    else
	    	a+=1900;
	}
		
	// Définition du dernier jour de février
	// Année bissextile si annnée divisible par 4 et que ce n'est pas un siècle, ou bien si divisible par 400
	if ( a%4 == 0 && a%100 !=0 || a%400 == 0) 
		fev = 29;
	else 
		fev = 28;
		
	// Nombre de jours pour chaque mois
	nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);
		
	// Enfin, retourne la date validée si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourne null
	if ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] )
		return ( new Date( a , m-1 , j ) )
	else
		return null
}

function calculWeek( thedate , namefield ) {
	StartOfLastWeekMS = thedate.getTime() - ( 24*60*60*1000*(thedate.getDay()+6)); 
	date1 = new Date(StartOfLastWeekMS);
	date2 = new Date(StartOfLastWeekMS+24*60*60*1000*6);
	tmp1 = date1.getDate(); tmp2 = date2.getDate();
	pjs = eval( "premierjourdelasemaine_" + namefield );
	if ( pjs == null ) pjs = premierjourdelasemaine;
	djs = eval( "dernierjourdelasemaine_" + namefield );
	if ( djs == null ) djs = dernierjourdelasemaine; 
	
	delta1 = 1 - pjs;
	if ( djs == 0 )
		delta2 = 0;
	else 
		delta2 = 7 - djs;
	date1.setDate( tmp1 + 7 - delta1 );
	date2.setDate( tmp2 + 7 - delta2 );
}

function displayWeek() {
	return Date2String( date1 ) + ' - ' + Date2String( date2 );
}

function displayMonth( thedate ) {
	return TAB_MONTH[ thedate.getMonth() ] + ' ' + ATCS_DATESEPARATOR + ' ' + thedate.getFullYear();
}

function displayWell( thedate , namefield_display , datepart ) {
	displayfield = document.getElementById( namefield_display );
	if ( displayfield != null ) {
		switch ( datepart ) {
			case 'DAY' : 
			case 'D' :
				displayfield.setAttribute( 'value' , Date2String( thedate ) );			
				break;
			case 'WEEK' :
			case 'W' :
				displayfield.setAttribute( 'value' , displayWeek() );
				break;
			case 'MONTH' :
			case 'M' :
				displayfield.setAttribute( 'value' , displayMonth( thedate ) );
				break;
			case 'YEAR' :
			case 'Y' :
				displayfield.setAttribute( 'value' , thedate.getFullYear() );
				break;
			default :
				alert( 'Unknown datepart' );
		}
	}
	else {
		alert( 'le champ ' + namefield_display + ' est nulle' );
	}
}
	
function plusDate( namefield_display, namefield_value , interval , datepart , isValueDatepart ) {
	if ( '' + datepart == 'undefined' || '' + datepart == 'null' || '' + datepart == '' ) datepart = 'DAY';
	if ( '' + isValueDatepart == 'undefined' || '' + isValueDatepart == 'null' || '' + isValueDatepart == '' ) isValueDatepart = '0';
	if ( '' + eval( 'value_temporary_' + namefield_value ) == 'null' || '' + eval('value_temporary_' + namefield_value ) == 'undefined' || '' + eval('value_temporary_' + namefield_value ) == '' ) {
		today = new Date();
		eval( 'value_temporary_' + namefield_value + ' = \'' + Date2String( today ) + '\'' );
	}

	idt = String2Date( eval( 'value_temporary_' + namefield_value ) );
	if ( idt != null ) {
		switch ( ('' + datepart).toUpperCase() ) {
			case 'DAY' :
			case 'D' :	
				tmp = idt.getDate();
				idt.setDate( tmp + interval );
				document.getElementById( namefield_display ).setAttribute( 'value' , Date2String( idt ) );
				break;
			case 'WEEK' :
			case 'W' :
				tmp = idt.getDate();
				idt.setDate( tmp + ( interval * 7 ) );
				calculWeek( idt , namefield_value );
				document.getElementById( namefield_display ).setAttribute( 'value' , displayWeek() );
				break;
			case 'MONTH' :
			case 'M' :
				tmp = idt.getMonth();
				idt.setMonth( tmp + interval );
				document.getElementById( namefield_display ).setAttribute( 'value' , displayMonth( idt ) );
				break;
			case 'YEAR' :
			case 'Y' :
				tmp = idt.getYear();
				idt.setYear( tmp + interval );
				document.getElementById( namefield_display ).setAttribute( 'value' , idt.getFullYear() );
				break;
		} 
		eval( 'value_temporary_' + namefield_value + ' = \'' + Date2String( idt ) + '\'' );
		if ( '' + isValueDatepart == '1' )
			document.getElementById( namefield_value ).setAttribute( 'value' , valuePart( idt , datepart , namefield_value ) );	
		else 
			document.getElementById( namefield_value ).setAttribute( 'value' , Date2String( idt ) );	
	}
} 	
		
function moinsDate( namefield_display , namefield_value , interval , datepart , isValueDatepart ) {
	if ( '' + datepart == 'undefined' || '' + datepart == 'null' || '' + datepart == '' ) datepart = 'DAY';
	if ( '' + isValueDatepart == 'undefined' || '' + isValueDatepart == 'null' || '' + isValueDatepart == '' ) isValueDatepart = '0';
	
	if ( '' + eval( 'value_temporary_' + namefield_value ) == 'null' || '' + eval('value_temporary_' + namefield_value ) == 'undefined' || '' + eval('value_temporary_' + namefield_value ) == '' ) {
		today = new Date();
		eval( 'value_temporary_' + namefield_value + ' = \'' + Date2String( today ) + '\'' );
	}

	idt = String2Date( eval( 'value_temporary_' + namefield_value ) );
	if ( idt != null ) {
		switch ( ('' + datepart).toUpperCase() ) {
			case 'DAY' :
			case 'D' :	
				idt.setDate( idt.getDate() - interval );
				document.getElementById( namefield_display ).setAttribute( 'value' , Date2String( idt ) );
				break;
			case 'WEEK' :
			case 'W' :
				tmp = idt.getDate();
				idt.setDate( tmp - ( interval * 7 ) );
				calculWeek( idt , namefield_value );
				document.getElementById( namefield_display ).setAttribute( 'value' , displayWeek() );
				break;
			case 'MONTH' :
			case 'M' :
				idt.setMonth( idt.getMonth() - interval );
				document.getElementById( namefield_display ).setAttribute( 'value' , displayMonth( idt ) );
				break;
			case 'YEAR' :
			case 'Y' :
				idt.setYear( idt.getYear() - interval );
				document.getElementById( namefield_display ).setAttribute( 'value' , idt.getFullYear() );
				break;
		}
		eval( 'value_temporary_' + namefield_value + ' = \'' + Date2String( idt ) + '\'' );
		if ( '' + isValueDatepart == '1' )
			document.getElementById( namefield_value ).setAttribute( 'value' , valuePart( idt , datepart , namefield_value ) );	
		else 
			document.getElementById( namefield_value ).setAttribute( 'value' , Date2String( idt ) );
	}
}

function ShowCalendar( imageCalendrier , champCalendrier , nameForm , couleur_instance , datepart , isValueDatepart ) {
	if ( '' + datepart == 'undefined' || '' + datepart == 'null' || '' + datepart == '' ) datepart = 'DAY';
	if ( '' + isValueDatepart == 'undefined' || '' + isValueDatepart == 'null' || '' + isValueDatepart == '' ) isValueDatepart = '0';

	g_htm = SERVER_URL + '/platform_v3/commonfiles/calendar.asp?formname=' + nameForm + '&fieldname=' + champCalendrier + '&value=' + document.getElementById( champCalendrier ).getAttribute('value') + '&couleur_instance=' + couleur_instance;
	g_iC = document.getElementById( imageCalendrier );
	var dB = document.body;
	var eL = 0;
	var eT = 0;
	for ( var p = g_iC ; p && p.tagName !='BODY'; p = p.offsetParent) {
		eL += p.offsetLeft;
		eT += p.offsetTop;
	}
	var eH = g_iC.offsetHeight;
	var dH = 0;
	var sT = dB.scrollTop;
	if ( eT - dH >= sT && eT + eH + dH > dB.clientHeight + sT )
		eT -= dH;
	else 
		eT += eH;
	cF = eval( 'document.' + nameForm + '.' + champCalendrier );
	cFD = eval( 'document.' + nameForm + '.' + champCalendrier + '_display' );
	cFt = eval( 'value_temporary_' + champCalendrier );
	cW = window.showModalDialog( g_htm , 'CalFrame_' + champCalendrier ,'dialogWidth:290px;dialogHeight:215px;center:1;scroll:0;help:0;status:0;left:' + eL + ';top:' + eT );
	if ( '' + cW != 'null' && '' + cW != 'undefined' && '' + cW != '' ) {
		if ( '' + isValueDatepart == '1' ) 
			cF.value = valuePart( String2Date( cW ) , datepart , champCalendrier );
		else
			cF.value = cW;
		eval( 'value_temporary_' + champCalendrier + ' = \'' + cW + '\';');
		dtd = String2Date( cW );
		if ( datepart == "WEEK" || datepart == "W" ) 
			calculWeek( dtd , champCalendrier );
		displayWell( dtd , champCalendrier + '_display' , datepart );
	}
}

function handlerKeyBoardForDate( nameField , interval , datepart , isValueDatepart ) {
	switch ( '' + event.keyCode ) {
		case '40' : // KEY DOWN
			moinsDate( nameField + '_display' , nameField , interval , datepart , isValueDatepart );
			break;
		case '38' : // KEY UP
			plusDate( nameField + '_display' , nameField , interval , datepart , isValueDatepart );
			break;
		default :
			break;
	}
}

function getFirstTimeTheDate( champCalendrier , datepart , isValueDatepart ) {
	testFirstTimeTheDate = eval( "testFirstTimeTheDate_" + champCalendrier );
	if ( testFirstTimeTheDate != null && !testFirstTimeTheDate ) {
		eval( "testFirstTimeTheDate_" + champCalendrier + " = true;" );
		idt = new Date();
		displayWell( idt , champCalendrier + '_display' , datepart );
		eval( 'value_temporary_' + champCalendrier + ' = \'' + Date2String( idt ) + '\'' );
		if ( '' + isValueDatepart == '1' )
			document.getElementById( champCalendrier ).setAttribute( 'value' , valuePart( idt , datepart , champCalendrier ) );	
		else 
			document.getElementById( champCalendrier ).setAttribute( 'value' , Date2String( idt ) );
	}
}