
/*####################################
#	XmlDateTime object
#	object om een datum string gecombineerd met een format string om te zetten naar een xml datetime
#	of een javascript datum
#####################################*/

var g_ReEx_xmldatetime = /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/

//constructor
XmlDateTime = function(Date,strFormat)
{
	
	var strDate = Date;
	var strFormat = strFormat;
	if(strFormat==null)strFormat='#yyyy-#M-#dT#H:#mm:#ss';
	if (typeof(Date)=="object")
	{ 
		strDate = Date.getDate()+'/'+(Date.getMonth()+1)+'/'+Date.getFullYear()+'/'+Date.getHours()+'/'+Date.getMinutes()+'/'+Date.getSeconds();
		strFormat = '#d/#M/#yyyy/#H/#mm/#ss';
	} 

	this.DateString = strDate;
	this.FormatString = strFormat;
	this.year="0000";
	this.month="00";
	this.day="00";
	this.hour="00";
	this.minutes="00";
	this.seconds="00";
	this.ExtractDate(this.DateString,this.FormatString);
};

//functie om xmldatum op te halen
XmlDateTime.prototype.GetXMLDateTime = function()
{
	return this.year+"-"+this.month+"-"+this.day+"T"+this.hour+":"+this.minutes+":"+this.seconds
};

//functie om datum op te halen
XmlDateTime.prototype.GetDateTime = function()
{
	return this.DateString;
};
XmlDateTime.prototype.GetDateTime = function(strFormat)
{
	var strResult = strFormat;
	strResult = strResult.replace('#yyyy',this.year);
	strResult = strResult.replace('#MM',this.month);
	strResult = strResult.replace('#M',parseInt(this.month,10));
	strResult = strResult.replace('#dd',this.day);
	strResult = strResult.replace('#d',parseInt(this.day,10));
	strResult = strResult.replace('#HH',this.hour);
	strResult = strResult.replace('#H',parseInt(this.hour,10));
	strResult = strResult.replace('#mm',this.minutes);
	strResult = strResult.replace('#ss',this.seconds);
	
	return strResult;
};

//functie om javascript datum op te halen
XmlDateTime.prototype.GetDateTimeJS = function()
{
	var dtmJS = new Date();
	
	dtmJS.setFullYear(this.year);
	dtmJS.setMonth(this.month-1);
	dtmJS.setDate(this.day);
	dtmJS.setHours(this.hour);
	dtmJS.setMinutes(this.minutes);
	dtmJS.setSeconds(this.seconds);
	return dtmJS;
};

XmlDateTime.prototype.ExtractDate = function (strDatePart,strFormatPart)
{
	var strFormat = strFormatPart
	var strDate = strDatePart
	var posStart = strFormat.indexOf("#")
	var posEnd = strFormat.substring(posStart+1,strFormat.length).indexOf("#")>-1?strFormat.substring(posStart+1,strFormat.length).indexOf("#"):strFormat.length;
	var strFirst = strFormat.substring(posStart,posEnd+1)
	var strRemainFormat = strFormat.substring(posEnd+1,strFormat.length)
	var strRemainDate = "";
	
	var strSeperator = strFirst.substring(strFirst.length-1,strFirst.length)

	if(strSeperator.search(/[#dmyhs]/i)>-1)
	{
		strSeperator = null;
		posEnd = strDate.length;
	}
	else
	{
		strFirst = strFirst.substring(0,strFirst.length-1)
		posEnd = strDate.indexOf(strSeperator)
	}

	var strValue = strDate.substring(posStart,posEnd)
	strValue = strValue.length<2?'0'+strValue:strValue
	
	switch(strFirst)
	{
		case '#yyyy':
		{
			this.year = strValue;
			break;
		}
		case '#MM':
		case '#M':
		{
			this.month = strValue;
			break;
		}
		case '#d':
		case '#dd':
		{
			this.day = strValue;
			break;
		}
		case '#H':
		case '#HH':
		{
			this.hour = strValue;
			break;
		}
		case '#mm':
		{
			this.minutes = strValue;
			break;
		}
		case '#ss':
		{
			this.seconds = strValue;
			break;
		}
	}
	if(strSeperator!=null)
	{
		if(strDate.indexOf(strSeperator)>-1)
		{
			strRemainDate = strDate.substring(strDate.indexOf(strSeperator)+1,strDate.length);
			this.ExtractDate(strRemainDate,strRemainFormat);
		}
	}
}

function checkExpression(strValue, strRegExp)
{


	var myRegExp	= new String(strRegExp);
	var intPos		= myRegExp.indexOf('@');
	var blnEmail	= intPos > 0;

	if(blnEmail && trimspaces(strValue) == '')
	{
		//Floris: Expressie is een email, dus niet checken indien leeg (wordt in form object ander altijd aangezien als fout e-mail adres
		return true;
	}
	
	var blnReg = false;
	var filter  = strRegExp;
	if (filter.test(strValue)) {
		blnReg = true;
	};
	return blnReg;
}

/* functie om bij voor en achter een string de lege spaties weg te halen. */
function trimspaces(strValue)
{
	strValue=strValue.replace(/^[\s]+/g,"");
    strValue=strValue.replace(/[\s]+$/g,"");
	return strValue;
};


/* functie om een xml datum te valideren.  */
function isXMLDate(date) 
{
	
	var blnResult = true;
	if(checkExpression(date,g_ReEx_xmldatetime))
	{
		var year = parseInt(date.substring(0,4),10);
		var month = parseInt(date.substring(5,7),10);
		var day = parseInt(date.substring(8,10),10);
		var hour = parseInt(date.substring(11,13),10);
		var minutes = parseInt(date.substring(14,16),10);
		var seconds = parseInt(date.substring(17,18),10);
		
		blnResult *= month>0&&month<13;
		blnResult *= day<=daysInMonth(month,year);
		blnResult *= hour>=0&&hour<24;
		blnResult *= minutes>=0&&minutes<60;
		blnResult *= seconds>=0&&seconds<60;
		
	}
	else
	{
		blnResult = false;
	}
	return blnResult==true;
};

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function daysInMonth(month,year) 
{
	var intResult = 31
	if (month==4 || month==6 || month==9 || month==11) {intResult = 30}
	if (month==2) {intResult = daysInFebruary(year)}
	return intResult
}

function compareXMLDates (value1, value2) {
   var date1, date2;
   var month1, month2;
   var year1, year2;
   var hour1, hour2;
   var min1, min2;

   year1	= value1.substring (0, 4);
   month1	= value1.substring (5,7);
   date1	= value1.substring (8,10);
   hour1	= value1.substring (11,13);
   min1		= value1.substring (14,17);

   year2	= value2.substring (0, 4);
   month2	= value2.substring (5,7);
   date2	= value2.substring (8,10);
   hour2	= value2.substring (11,13);
   min2		= value2.substring (14,17);

   if (year1 > year2) return 1;
   else if (year1 < year2) return -1;
   else if (month1 > month2) return 1;
   else if (month1 < month2) return -1;
   else if (date1 > date2) return 1;
   else if (date1 < date2) return -1;
   else if (hour1 > hour2) return 1;
   else if (hour1 < hour2) return -1;
   else if (min1 > min2) return 1;
   else if (min1 < min2) return -1;
   else return 0;
} 


//#########################################
