/*
 * WebCT95
 *
 * Copyright (C) 2003 Conseil Général du Val d'Oise. All Rights
 * Reserved.
 *
 * Developed by IDEALX S.A.S. and Business Decision
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 */

function MyDate(date){

	this.date=null;

	this.DAYS=['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche'];
	this.MONTHS=['décembre','janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre'];

	this.TYPE={
		date:0
	};

	this.parse=function(date){
		if(!date || date==''){
			this.date=new Date();
			return;
		}
		var dates=date.split(' ');
		var times=dates[1].split(':');
		dates=dates[0].split('-');
		this.date=new Date(dates[0],dates[1]-1,dates[2],times[0],times[1],times[2]);
	};
	this.parse(date);


	this.getYMDHMS=function(){
		return this.getYMD()+' '+this.getHMS();
	};

	this.getYMDAsNumeric=function(){
		var date=this.date.getDate();
		if(date<10) date='0'+date;
		var month=this.date.getMonth()+1;
		if(month<10) month='0'+month;
		return this.date.getFullYear()+''+month+''+date;
	};

	this.getYMD=function(){
		var date=this.date.getDate();
		if(date<10) date='0'+date;
		var month=this.date.getMonth()+1;
		if(month<10) month='0'+month;
		return this.date.getFullYear()+'-'+month+'-'+date;
	};

	this.getHMS=function(){
		var hour=this.date.getHours();
		if(hour<10) hour='0'+hour;
		var min=this.date.getMinutes();
		if(min<10) min='0'+min;
		var sec=this.date.getSeconds();
		if(sec<10) sec='0'+sec;
		return hour+':'+min+':'+sec;
	};


	this.format=function(){
		return this.formatDate()+' à '+this.formatTime();
	};

	this.formatDate=function(){
		var date=this.date.getDate();
		if(date<10) date='0'+date;
		return this.DAYS[this.date.getDay()]+' '+date+' '+this.MONTHS[this.date.getMonth()+1]+' '+this.date.getFullYear();
	};

	this.formatTime=function(){
		var hour=this.date.getHours();
		if(hour<10) hour='0'+hour;
		minutes=this.date.getMinutes();
		if(minutes<10) minutes='0'+minutes;
		return hour+':'+minutes;
	};

	this.before=function(date){
		return this.date.getTime()<date.date.getTime();
	};

	this.add=function(type,value){
		var base=1000;
		if(type==this.TYPE.date) base=base*60*60*24;
		this.date.setTime(this.date.getTime()+value*base);
	};

};

function validateDate(value,datePattern){
	var bValid = true;
	var MONTH = "MM";
	var DAY = "dd";
	var YEAR = "yyyy";
	var orderMonth = datePattern.indexOf(MONTH);
	var orderDay = datePattern.indexOf(DAY);
	var orderYear = datePattern.indexOf(YEAR);
	if((orderDay < orderYear && orderDay > orderMonth)){
		var iDelim1 = orderMonth + MONTH.length;
		var iDelim2 = orderDay + DAY.length;
		var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
		var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
		if (iDelim1 == orderDay && iDelim2 == orderYear) {
			dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
		} else if (iDelim1 == orderDay) {
			dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
		} else if (iDelim2 == orderYear) {
			dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
		} else {
			dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
		}
		var matched = dateRegexp.exec(value);
		if(matched != null) {
			if (!isValidDate(matched[2], matched[1], matched[3])) {
				bValid =  false;
			}
	 	} else {
			bValid =  false;
		}
	} else if ((orderMonth < orderYear && orderMonth > orderDay)) {
		var iDelim1 = orderDay + DAY.length;
		var iDelim2 = orderMonth + MONTH.length;
		var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
		var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
		if (iDelim1 == orderMonth && iDelim2 == orderYear) {
			dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
		} else if (iDelim1 == orderMonth) {
			dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
		} else if (iDelim2 == orderYear) {
			dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
		} else {
			dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
		}
		var matched = dateRegexp.exec(value);
		if(matched != null) {
			if (!isValidDate(matched[1], matched[2], matched[3])) {
				bValid =  false;
			}
		} else {
			bValid =  false;
		}
	} else if ((orderMonth > orderYear && orderMonth < orderDay)) {
		var iDelim1 = orderYear + YEAR.length;
		var iDelim2 = orderMonth + MONTH.length;
		var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
		var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
		if (iDelim1 == orderMonth && iDelim2 == orderDay) {
			dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
		} else if (iDelim1 == orderMonth) {
			dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
		} else if (iDelim2 == orderDay) {
			dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
		} else {
			dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
		}
		var matched = dateRegexp.exec(value);
		if(matched != null) {
			if (!isValidDate(matched[3], matched[2], matched[1])) {
				bValid =  false;
			}
		} else {
				bValid =  false;
		}
	} else {
		bValid =  false;
	}
	return bValid;
}

function isValidDate(day, month, year) {
	if (month < 1 || month > 12) {
		return false;
	}
	if (day < 1 || day > 31) {
		return false;
	}
	if ((month == 4 || month == 6 || month == 9 || month == 11) && (day == 31)) {
		return false;
	}
	if (month == 2) {
		var leap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day == 29 && !leap)) {
			return false;
		}
	}
	return true;
}