/*
	Author: Matt Johnson
	Company: Bullhorn.co.uk
	Last Mod: 25/01/2008
*/
var DatePicker = new Class({
	initialize: function(dp){
		this.dayChars = 1;
		this.dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
		this.daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
		this.format = 'dd/mm/yyyy';
		this.monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
		this.startDay = 1;
		this.yearOrder = 'desc';
		this.yearRange = 81;
		this.yearStart = (Number(new Date().getFullYear()));
		this.dayObject = null;
		this.monthObject = null;
		this.yearObject = null;
		this.evalFunction = null;
		this.privateUpdate = null;
		this.privateUpdate2 = null;
		this.poppedUp = false;
		if (dp.value != '') {
			if (dp.value.indexOf('/') > 0) {
				dp.then = new Date(Number(dp.value.split('/')[2]), (Number(dp.value.split('/')[1]) - 1), Number(dp.value.split('/')[0]));
			} else {
				dp.then = new Date(dp.value); }
			dp.today = new Date(); }
		if ((!dp.then) || (String(dp.then == 'NaN'))) {
			dp.then = dp.today = new Date(); }
		dp.oldYear = dp.year = dp.then.getFullYear();
		dp.oldMonth = dp.month = dp.then.getMonth();
		dp.oldDay = dp.then.getDate();
		dp.nowYear = dp.today.getFullYear();
		dp.nowMonth = dp.today.getMonth();
		dp.nowDay = dp.today.getDate();
		if(dp.alt) {
			options = JSON.decode(dp.alt);
		} else {
			options = []; }
		dp.optionArray = {
			monthNames: (options.monthNames && options.monthNames.length == 12 ? options.monthNames : this.monthNames) || this.monthNames, 
			daysInMonth: (options.daysInMonth && options.daysInMonth.length == 12 ? options.daysInMonth : this.daysInMonth) || this.daysInMonth, 
			dayNames: (options.dayNames && options.dayNames.length == 7 ? options.dayNames : this.dayNames) || this.dayNames,
			startDay : options.startDay || this.startDay,
			dayChars : options.dayChars || this.dayChars, 
			format: options.format || this.format,
			yearStart: options.yearStart || this.yearStart,
			yearRange: options.yearRange || this.yearRange,
			yearOrder: options.yearOrder || this.yearOrder,
			maxDate: options.maxDate,
			minDate: options.minDate,
			yearSelected: options.yearSelected
		};
		try {
			dp.setProperties({'id':dp.getProperty('name')});
		} catch(err) {  }
		dp.container = false;
		dp.calendar = false;
		dp.iframe = false;
		dp.interval = null;
		dp.selectionMade = false;
		dp.active = false;
		dp.dayObject = null;
		dp.monthObject = null;
		dp.yearObject = null;
		dp.privateUpdate = null;
		dp.privateUpdate2 = null;
		dp.poppedUp = false;
	},
	create: function(dp) {
		if (window['mattsCalenderCloser']) {
			var dpx = dGetById(String(window['mattsCalenderCloser']));
			if (dpx) {
				if (dp != dpx) {
					dpx.active = false;
					if (window.opera) dpx.container.empty();
					else if (dpx.container) dpx.container.remove();
					dpx.calendar = false;
					dpx.container = false;
				}
			}
		}
		var inSelectionPop = false;
		var hasValidDate = false;
		var valSel = dp.value;
		if (valSel != '') {
			if (this.privateUpdate) {
				valSel = this.privateUpdate.value;
			} else if (this.dayObject && this.monthObject && this.yearObject) {
				valSel = String(this.dayObject.value) + '/' + String(this.monthObject.value) + '/' + String(this.yearObject.value);
			}
			if (valSel.indexOf('/') > 0) {
				var testDate = new Date(Number(valSel.split('/')[2]), (Number(valSel.split('/')[1]) - 1), Number(valSel.split('/')[0]));
				hasValidDate = (Number(testDate.getDate()) > 0); } }
		if (dp.optionArray.yearStart && !dp.selectionMade) {
			dp.year = dp.optionArray.yearStart;
			dp.yearStart = dp.year; }
		if ((!dp.selectionMade) && hasValidDate) {
			if (valSel.indexOf('/') > 0) {
				dp.then = new Date(Number(valSel.split('/')[2]), (Number(valSel.split('/')[1]) - 1), Number(valSel.split('/')[0]));
			} else {
				dp.then = new Date(valSel); }
			dp.month = dp.then.getMonth();
			dp.year = dp.then.getFullYear(); }
		if (dp.selectionMade) {
			dp.selectionMade = false;
			inSelectionPop = true; }
		if (dp.calendar) return false;
		dp.container = new Element('div', {'class':'dp_container'}).injectBefore(dp);
		dp.container.onmouseover = dp.onmouseover = function(){
			$clear(dp.interval);
		};
		var affAppend = '';
		if (window['__aff_'])
			affAppend = 'aff';
		dp.calendar = new Element('div', {'class':affAppend + 'dp_cal'});
		dp.calendar.style.zIndex = 100;
		dp.container.appendChild(dp.calendar);
		dp.iframe = document.createElement('iframe');
		dp.iframe.style.cssText = 'z-index:1;position:absolute;border:0px;margin:0px;padding:0px;left:3px;top:27px;width:194px;height:184px;';
		dp.iframe.src = '/blank.htm';
		dp.iframe.name = 'Gofa';
		dp.container.appendChild(dp.iframe);
		var date = new Date();
		if ((dp.month || (dp.month == 0)) && dp.year) {
			date.setFullYear(dp.year, dp.month, 1);
		} else {
			dp.month = date.getMonth();
			dp.year = date.getFullYear();
			date.setDate(1);
		}
		dp.year % 4 == 0 ? dp.optionArray.daysInMonth[1] = 29 : dp.optionArray.daysInMonth[1] = 28;
		var firstDay = (1-(7+date.getDay()-dp.optionArray.startDay)%7);
		monthSel = new Element('select', {'id':dp.id + '_monthSelect'});
		for (var m = 0; m < dp.optionArray.monthNames.length; m++){
			monthSel.options[m] = new Option(dp.optionArray.monthNames[m], m);
			if (dp.month == m) monthSel.options[m].selected = true;
			monthSel.options[m].onmouseover = function(){
				clearTimeout(window['calKill']);
			}.bind(this);
		}
		yearSel = new Element('select', {'id':dp.id + '_yearSelect'});
		i = 0;
		dp.optionArray.yearStart ? dp.optionArray.yearStart : dp.optionArray.yearStart = date.getFullYear();
		if (dp.optionArray.yearOrder == 'desc'){
			for (var y = dp.optionArray.yearStart; y > (dp.optionArray.yearStart - dp.optionArray.yearRange - 1); y--){
				yearSel.options[i] = new Option(y, y);
				if (dp.optionArray.yearSelected && !inSelectionPop && !hasValidDate) {
					yearSel.options[i].selected = (Number(dp.optionArray.yearSelected) == y);
				} else {
					yearSel.options[i].selected = (dp.year == y);
				}
				yearSel.options[i].onmouseover = function(){
					clearTimeout(window['calKill']);
				}.bind(this);
				i++;
			}
		} else {
			for (var y = dp.optionArray.yearStart; y < (dp.optionArray.yearStart + dp.optionArray.yearRange + 1); y++){
				yearSel.options[i] = new Option(y, y);
				if (dp.year == y) yearSel.options[i].selected = true;
				yearSel.options[i].onmouseover = function(){
					clearTimeout(window['calKill']);
				}.bind(this);
				i++;
			}
		}
		dp.formatValue = this.formatValue;
		dp.setKillTimeout = this.setKillTimeout;
		dp.killCal = this.killCal;

		dp.dayObject = this.dayObject;
		dp.monthObject = this.monthObject;
		dp.yearObject = this.yearObject;

		dp.privateUpdate = this.privateUpdate;
		dp.privateUpdate2 = this.privateUpdate2;

		calMonthDiv = new Element('div');
		calMonthDiv.className = affAppend + 'dp_header';

		var lessLink = new Element('a');
		lessLink.className = 'dp_alty';
		lessLink.onclick = function(){
			dp.month = (Number(monthSel.value) - 1);
			if (dp.month < 0) {
				dp.month = 11;
				dp.year = (Number(yearSel.value) - 1);
			} else {
				dp.year = yearSel.value;
			}
			dp.selectionMade = true;
			this.remove(dp);
			this.create(dp);
			return false;
		}.bind(this);
		lessLink.href = '#';
		lessLink.innerHTML = '&lt;';
		lessLink.injectInside(calMonthDiv);

		var junkSpan1 = new Element('span');
		junkSpan1.innerHTML = '&nbsp;';
		junkSpan1.injectInside(calMonthDiv);

		monthSel.injectInside(calMonthDiv);
		yearSel.injectInside(calMonthDiv);

		var junkSpan2 = new Element('span');
		junkSpan2.innerHTML = '&nbsp;';
		junkSpan2.injectInside(calMonthDiv);

		var moreLink = new Element('a');
		moreLink.className = 'dp_alty';
		moreLink.onclick = function(){
			dp.month = (Number(monthSel.value) + 1);
			if (dp.month > 11) {
				dp.month = 0;
				dp.year = (Number(yearSel.value) + 1);
			} else {
				dp.year = yearSel.value;
			}
			dp.selectionMade = true;
			this.remove(dp);
			this.create(dp);
			return false;
		}.bind(this);
		moreLink.href = '#';
		moreLink.innerHTML = '&gt;';
		moreLink.injectInside(calMonthDiv);

		calMonthDiv.injectInside(dp.calendar);

		calTableDiv = new Element('div');
		calTableDiv.className = affAppend + 'dp_table_container';
		calTableDiv.injectInside(dp.calendar);

		calTable = new Element('table');
		calTableTbody = new Element('tbody');
		calDayNameRow = new Element('tr');
		for (var i = 0; i < dp.optionArray.dayNames.length; i++) {
			calDayNameCell = new Element('th');
			calDayNameCell.appendText(dp.optionArray.dayNames[(dp.optionArray.startDay+i)%7].substr(0, dp.optionArray.dayChars)); 
			calDayNameCell.injectInside(calDayNameRow);
		}
		calDayNameRow.injectInside(calTableTbody);
		var maxDate = null;
		if (dp.optionArray.maxDate) {
			if (dp.optionArray.maxDate.indexOf('/') > 0) {
				maxDate = new Date(Number(dp.optionArray.maxDate.split('/')[2]), (Number(dp.optionArray.maxDate.split('/')[1]) - 1), Number(dp.optionArray.maxDate.split('/')[0]));
			}
		}
		var minDate = null;
		if (dp.optionArray.minDate) {
			if (dp.optionArray.minDate.indexOf('/') > 0) {
				minDate = new Date(Number(dp.optionArray.minDate.split('/')[2]), (Number(dp.optionArray.minDate.split('/')[1]) - 1), Number(dp.optionArray.minDate.split('/')[0]));
			}
		}
		if (dp.optionArray.yearSelected && !inSelectionPop && !hasValidDate) {
			dp.year = Number(dp.optionArray.yearSelected);
		}
		while (firstDay <= dp.optionArray.daysInMonth[dp.month]){
			calDayRow = new Element('tr');
			for (i = 0; i < 7; i++){
				if ((firstDay <= dp.optionArray.daysInMonth[dp.month]) && (firstDay > 0)){
					var shouldContinue = true;
					if (maxDate && minDate) {
						var abc1 = (Number(dp.year) < maxDate.getFullYear());
						var abc2 = ((Number(dp.year) == maxDate.getFullYear()) && ((parseInt(dp.month)) < maxDate.getMonth()));
						var abc3 = ((Number(dp.year) == maxDate.getFullYear()) && ((parseInt(dp.month)) == maxDate.getMonth()) && ((firstDay) <= maxDate.getDate()));
						var abc4 = (Number(dp.year) > minDate.getFullYear());
						var abc5 = ((Number(dp.year) == minDate.getFullYear()) && ((parseInt(dp.month)) > minDate.getMonth()));
						var abc6 = ((Number(dp.year) == minDate.getFullYear()) && ((parseInt(dp.month)) == minDate.getMonth()) && ((firstDay) >= minDate.getDate()));
						
						shouldContinue = ( ( (Number(dp.year) < maxDate.getFullYear()) || ((Number(dp.year) == maxDate.getFullYear()) && ((parseInt(dp.month)) < maxDate.getMonth())) || ((Number(dp.year) == maxDate.getFullYear()) && ((parseInt(dp.month)) == maxDate.getMonth()) && ((firstDay) <= maxDate.getDate())) ) &&  ( (Number(dp.year) > minDate.getFullYear()) || ((Number(dp.year) == minDate.getFullYear()) && ((parseInt(dp.month)) > minDate.getMonth())) || ((Number(dp.year) == minDate.getFullYear()) && ((parseInt(dp.month)) == minDate.getMonth()) && ((firstDay) >= minDate.getDate())) ));
					} else if (maxDate) {
						shouldContinue = ( (Number(dp.year) < maxDate.getFullYear()) || ((Number(dp.year) == maxDate.getFullYear()) && ((parseInt(dp.month)) < maxDate.getMonth())) || ((Number(dp.year) == maxDate.getFullYear()) && ((parseInt(dp.month)) == maxDate.getMonth()) && ((firstDay) <= maxDate.getDate())) );
					} else if (minDate) {
						shouldContinue = ( (Number(dp.year) > minDate.getFullYear()) || ((Number(dp.year) == minDate.getFullYear()) && ((parseInt(dp.month)) > minDate.getMonth())) || ((Number(dp.year) == minDate.getFullYear()) && ((parseInt(dp.month)) == minDate.getMonth()) && ((firstDay) >= minDate.getDate())) );
					}

					if (shouldContinue) {
						calDayCell = new Element('td', {'class':dp.id + '_calDay', 'axis':dp.year + '|' + (parseInt(dp.month) + 1) + '|' + firstDay}).appendText(firstDay).injectInside(calDayRow);
					} else {
						calDayCell = new Element('td', {'class':'dp_empty'}).appendText('X').injectInside(calDayRow);
					}
					calDayCell.addClass('dp_dateCell');
				} else {
					calDayCell = new Element('td', {'class':'dp_empty'}).appendText(' ').injectInside(calDayRow);
				}
				if ( (firstDay == dp.oldDay) && (dp.month == dp.oldMonth ) && (dp.year == dp.oldYear) ) {
					calDayCell.addClass('dp_selected');
				}
				if ( (firstDay == dp.nowDay) && (dp.month == dp.nowMonth ) && (dp.year == dp.nowYear) ) {
					calDayCell.addClass('dp_today');
				}
				firstDay++;
			}
			calDayRow.injectInside(calTableTbody);
		}
		calTableTbody.injectInside(calTable);

		var btnCloseRow = new Element('tr');
		var btnCloseCell = new Element('td');
		var btnCloseLink = new Element('a');
		btnCloseLink.appendText('Close');
		btnCloseLink.id = (String(dp.id) + '_btnClose');
		btnCloseLink.href = ('#');
		btnCloseLink.injectInside(btnCloseCell);
		btnCloseCell.colSpan = 7;
		btnCloseCell.injectInside(btnCloseRow);
		btnCloseRow.injectInside(calTableTbody);

		calTable.injectInside(calTableDiv);
		$$('td.' + dp.id + '_calDay').each(function(el){
			el.onmouseover = function(){
				el.addClass('dp_roll');
			}.bind(this);
		}.bind(this));
		$$('td.' + dp.id + '_calDay').each(function(el){
			el.onmouseout = function(){
				el.removeClass('dp_roll');
			}.bind(this);
		}.bind(this));
		$$('td.' + dp.id + '_calDay').each(function(el){
			el.onclick = function(){
				ds = el.axis.split('|');
				dp.value = this.formatValue(dp, ds[0], ds[1], ds[2]);
				dp.selectionMade = true;
				this.remove(dp);
			}.bind(this);
		}.bind(this));

		window['mattsCalenderCloser'] = dp.id;

		addEvent(btnCloseLink, 'click', function() {
			var dp = dGetById(String(window['mattsCalenderCloser']));
			if (dp) {
				dp.killCal();
			}
			return false;
		}, false);
		monthSel.onfocus = function(){ dp.active = true; };
		monthSel.onclick = function(){
			if (document.activeElement) {
				dp.poppedUp = (document.activeElement == monthSel);
			}
		};
		monthSel.onblur = function(){
			dp.poppedUp = false;
		};
		monthSel.onchange = function(){
			dp.poppedUp = false;
			dp.month = monthSel.value;
			dp.year = yearSel.value;
			dp.selectionMade = true;
			dp.formatValue(dp, dp.year, Number(dp.month) + 1, dp.oldDay);
			this.remove(dp);
			this.create(dp);
		}.bind(this);
		yearSel.onfocus = function(){ dp.active = true; };
		yearSel.onchange = function(){
			dp.poppedUp = false;
			dp.month = monthSel.value;
			dp.year = yearSel.value;
			dp.selectionMade = true;
			dp.formatValue(dp, dp.year, Number(dp.month) + 1, dp.oldDay);
			this.remove(dp);
			this.create(dp);
		}.bind(this);

		monthSel.onmouseover = function(){
			clearTimeout(window['calKill']);
		}.bind(this);
		yearSel.onmouseover = function(){
			clearTimeout(window['calKill']);
		}.bind(this);
		monthSel.onfocus = function(){
			clearTimeout(window['calKill']);
		}.bind(this);
		yearSel.onfocus = function(){
			clearTimeout(window['calKill']);
		}.bind(this);
		monthSel.onblur = function(){
			dp.setKillTimeout();
		}.bind(this);
		yearSel.onblur = function(){
			dp.setKillTimeout();
		}.bind(this);
		dp.container.onmouseover = function(){
			clearTimeout(window['calKill']);
		}.bind(this);
		dp.container.onmouseout = function(){
			var canPop = false;
			if (document.activeElement) {
				// IE messes up and doesn't cover hovering over options
				canPop = ((document.activeElement == monthSel) || (document.activeElement == yearSel));
			}
			if (!canPop) {
				dp.setKillTimeout();
			}
		}.bind(this);
		dp.setKillTimeout();
	},
	killCal: function(exx) {
		var dp = dGetById(String(window['mattsCalenderCloser']));
		if (dp) {
			dp.formatValue(dp, dp.year, Number(dp.month) + 1, dp.oldDay);
			dp.selectionMade = true;
			$clear(dp.interval);
			dp.active = false;
			if (window.opera) dp.container.empty();
			else if (dp.container) dp.container.remove();
			dp.calendar = false;
			dp.container = false;
			clearTimeout(window['calKill']);
		}
		return false;
	},
	setKillTimeout: function(exx) {
		clearTimeout(window['calKill']);
		window['calKill'] = setTimeout('var dp = dGetById(String(window[\'mattsCalenderCloser\']));\nif (dp) {\ndp.killCal()\n}', 3000);
	},
	formatValue: function(dp, year, month, day){
		var dateStr = '';
		if (day < 10) day = '0' + String(Number(day));
		if (month < 10) month = '0' + String(Number(month));
		dateStr = dp.optionArray.format.replace( /dd/i, day ).replace( /mm/i, month ).replace( /yyyy/i, year );
		dp.month = dp.oldMonth = '' + (month - 1) + '';
		dp.year = dp.oldYear = year;
		dp.oldDay = day;
		if (this.privateUpdate) {
			this.privateUpdate.value = dateStr;
		}
		if (this.privateUpdate2) {
			this.privateUpdate2.value = dateStr;
		}
		if (this.dayObject && this.monthObject && this.yearObject) {
			this.dayObject.value = day;
			this.monthObject.value = month;
			this.yearObject.value = year;
			if (this.evalFunction)
				eval(this.evalFunction);
			return String(day);
		} else {
			if (this.evalFunction)
				eval(this.evalFunction);
			return dateStr;
		}
	},
	remove: function(dp){
		$clear(dp.interval);
		dp.active = false;
		if (window.opera) dp.container.empty();
		else if (dp.container) dp.container.remove();
		dp.calendar = false;
		dp.container = false;
		$$('select.dp_hide').removeClass('dp_hide');
	}
});
function createCalendarConvict(ele1) {
	if (ele1) {
		var index1 = (ele1.id.indexOf('_'));
		if (index1 < 0)
			index1 =  (ele1.id.indexOf('$'));
		if (index1 > 0) {
			var prefix = ((ele1.id.substring(0, ((ele1.id.indexOf('_')) + 1))));
			var element = dGetById(prefix + 'TxtD_Conviction');
			prefix = prefix.replace('$', '_');
			if (element) {
				var dpObj1 = new DatePicker(element);
				element.id = prefix + 'TxtD_Conviction';
				if (dpObj1) {
					dpObj1.dayObject = element;
					dpObj1.monthObject = dGetById(prefix + 'TxtM_Conviction');
					dpObj1.yearObject = dGetById(prefix + 'TxtY_Conviction');
					dpObj1.create(element, dpObj1);
				}
			}
		}
	}
}
function createCalendarClaim(ele1) {
	if (ele1) {
		var index1 = (ele1.id.indexOf('_'));
		if (index1 < 0)
			index1 =  (ele1.id.indexOf('$'));
		if (index1 > 0) {
			var prefix = ((ele1.id.substring(0, ((ele1.id.indexOf('_')) + 1))));
			var element = dGetById(prefix + 'txtD_ClaimDateA');
			prefix = prefix.replace('$', '_');
			if (element) {
				var dpObj1 = new DatePicker(element);
				element.id = prefix + 'txtD_ClaimDateA';
				if (dpObj1) {
					dpObj1.dayObject = element;
					dpObj1.monthObject = dGetById(prefix + 'txtM_ClaimDateA');
					dpObj1.yearObject = dGetById(prefix + 'txtY_ClaimDateA');
					dpObj1.create(element, dpObj1);
				}
			}
		}
	}
}