var thisClassName = "calendarCon";
var thisEventTarget; 

function setDateFocussing() {
	var el = getElement(thisEventTarget.replace(new RegExp('\\$', 'g'),"_") + '_input');
	if (el)
	{
		currentEventTarget = getElementFromTabIndex(el.tabIndex+2);
		if (currentEventTarget == null && thisEventTarget != null) { currentEventTarget = thisEventTarget; }
		fieldToFocusId = currentEventTarget.id;
		setCurrentFocus();
	}
}

function ajaxDateControlMain(id, eventTarget, eventArgument)
{
	var cboDate					= new CallBackObject();
	cboDate.OnCompleteWithId	= cboDateCompleteWithIdMain;
	cboDate.OnError				= callBackError;
	cboDate.id					= id;
	cboDate.setFocus			= false;
	
	thisEventTarget = eventTarget;
	
	cboDate.DoCallBack(eventTarget, eventArgument, true);
	return false;
}

function onBlurUpdate(id) {
}

function cboDateCompleteWithIdMain(id, responseText, responseXML)
{   
	var div = getElement(id + 'Main');	
	div.innerHTML = responseText;	
	checkDate(id + '_input','label' + id);
}

function ajaxDateControlMainRefreshParent(parentId, eventTarget, eventArgument) {
	thisEventTarget = eventTarget;
	doAjaxWithoutFocus(blankResponse, false, eventTarget, eventArgument);
	if (eventArgument.indexOf('SEL') >= -1) {
		setDateFocussing();
}
	setTimeout('refresh' + parentId + '()',500);
}

/*function cboDateCompleteRefreshParent(divId, responseText, responseXML)
{   
	var div = getElement(divId);
	div.innerHTML = responseText;
	if (responseText == '') {
		setDateFocussing();
	}
}*/

function ajaxDateControl(divId, eventTarget, eventArgument)
{	
	var cboDate					= new CallBackObject();
	cboDate.OnCompleteWithId	= cboDateCompleteWithId;
	cboDate.OnError				= callBackError;
	cboDate.id					= divId;
	cboDate.setFocus			= false;
	
	if (eventArgument == "TOGGLE") { thisClassName = "calendarCon"; }
	
	thisEventTarget = eventTarget;
				
	cboDate.DoCallBack(eventTarget, eventArgument);
	return false;		
}

function cboDateCompleteWithId(divId, responseText, responseXML)
{    
	getElement(divId + 'CalendarCon').className = 'calendarCon';

	if (responseText == '') { hideElement(divId + 'DateFrame'); hideElement(divId + 'DatePicker'); }
	else 
	{
		var divArray = new Array();
		
		divArray = document.getElementsByTagName('div');
				
		for (var i=0; i < divArray.length; i++) {
			var div = divArray[i];
			if (div.id.indexOf('DatePicker') > -1) {
				if (div.id.indexOf(divId) == -1) {
					var thisId = div.id.substring(0,div.id.indexOf('DatePicker'));
					div.innerHTML = '';
					hideElement(thisId + 'DateFrame');
					hideElement(thisId + 'DatePicker');
				}
			}
		}
					
		if (thisClassName == 'calendarCon') {
			if (_clickY > ((screen.height / 2) - 50)) {
				thisClassName = 'calendarCon calAbove';
				getElement(divId + 'CalendarCon').className = thisClassName;
			}
		}
		else {
			getElement(divId + 'CalendarCon').className = thisClassName;
		}
		showElement(divId + 'DateFrame'); showElement(divId + 'DatePicker');
	}
	
	_clickY = 0;
	
	var datePicker = getElement(divId + 'DatePicker');
	datePicker.innerHTML = responseText;	
	
	if (responseText == '') {
		setDateFocussing();
	}
}

function setDateValue(divId, eventTarget)
{
	ajaxDateControl(divId, eventTarget, 'SETVALUE')
}

function setIFrameHeight(divId)
{
	getElement(divId + 'DateFrame').style.height = getElement(divId + 'DatePicker').offsetHeight - 3;
}

function iDateControlRequired(s,e)
{
	var inputId = s.id.replace(/validatorRequired/g,"input");
	var labelId = 'label' + s.id.replace(/_validatorRequired/g,"");
	var input = getElement(inputId);
	var label = getElement(labelId);
	
	if (input) {
		if (input.value.length == 0)
		{
			e.IsValid = false;
			if (label) { label.className='error'; }
		}
		else
		{
			e.IsValid = true;
		}
	}
}

function iDateIsValid(s,e) {
	var inputId = s.id.replace(/validator/g,"input");
	var labelId = 'label' + s.id.replace(/_validator/g,"");
		
	if (checkDate(inputId, labelId))
	{
		e.IsValid = true;
	}
	else
	{
		e.IsValid = false;
	}
}

function checkDate(inputId, labelId)
{
	
	var valid = true;
	var label = getElement(labelId);
	
	valid = testValidDate(inputId, labelId);
	
	if (!valid) {
		valid = checkDateStringForDayEntry(inputId)
	}
	if (!valid) {
		valid = convertStringToDate(inputId, "/");
	}
	if (!valid) {
		valid = convertStringToDate(inputId, ".");
	}
	if (!valid) {
		valid = convertStringToDate(inputId, " ");
	}	
	
	valid = testValidDate(inputId, labelId);
	
	if (valid) {
		if (label) label.className='';
		return true;
	}
	else {
		if (label) label.className='error';
		return false;
	}
}

function checkDatePostBack(inputId, labelId)
{
	var valid = true;
	var label = getElement(labelId);
	
	valid = testValidDate(inputId, labelId);
	
	if (!valid) {
		valid = checkDateStringForDayEntry(inputId)
	}
	if (!valid) {
		valid = convertStringToDate(inputId, "/");
	}
	if (!valid) {
		valid = convertStringToDate(inputId, ".");
	}
	if (!valid) {
		valid = convertStringToDate(inputId, " ");
	}	
	
	valid = testValidDate(inputId, labelId);
	
	if (valid && getElement(inputId).value != '') {
		if (label) label.className='';	
		p('s:quickDate','PBSELCURRENT');
		return true;
	}
	else {
		if (label) label.className='error';
		return false;
	}
}

function testValidDate(inputId, labelId) 
{
	var input = getElement(inputId);
		
	var seperator = "/";
	var daysInMonth, day, month, year;
	var valid = true;
		
	var dateString = trimString(input.value);
	
	var position1 = dateString.indexOf(seperator);
	var position2 = dateString.indexOf(seperator, position1 + 1);
	
	var strDay = dateString.substring(0, position1);
	var strMonth = dateString.substring(position1 + 1, position2);
	var strYear = dateString.substring(position2 + 1);
	
	if (dateString != '') {
		if (dateString.length != 2 && (position1 == -1 || position2 == -1)) {
			valid = false;
		}
		else {
			if (strDay.charAt(0) == "0" && strDay.length > 1) {
				strDay = strDay.substring(1);
			}	

			if (strMonth.charAt(0) == "0" && strMonth.length > 1) {
				strMonth = strMonth.substring(1);
			}
				
			if (strYear.charAt(0) == "0" && strYear.length > 1) {
				strYear = strYear.substring(1);
			}
			
			month = parseInt(strMonth);
			day = parseInt(strDay);
			year = parseInt(strYear);

			daysInMonth = daysInMonthYear(month - 1, year);
		}		
		
		if (strMonth.length < 1 || strMonth.length > 2 || month < 1 || month > 12) {
			valid = false;
		}
		if (strDay.length < 1 || strDay.length > 2 || day < 1 || day > daysInMonth) {
			valid = false;
		}
		if (strYear.length != 4 || year == 0) {
			valid = false;
		}	
	}
	
	if (valid) {	
		if (strDay.length == 1) {
			strDay = "0" + strDay;
		}
		if (strMonth.length == 1) {
			strMonth = "0" + strMonth;
		}
		if (strYear.length == 2) {
			strYear = setYear(strYear);
		}
		
		if (strDay.length > 0 || strMonth.length > 0 || strYear.length > 0) {
			dateString = strDay + '/' + strMonth + '/' + strYear;
		}
		
		input.value = dateString;
		return true;
	}
	else {
		return false;
	}
}

function convertStringToDate(inputId, seperator) 
{	
	var input = getElement(inputId);
	var todaysDate = new Date();
	var strCurrentMonth = new String(todaysDate.getMonth()+1);
	var strCurrentYear = new String(todaysDate.getFullYear());
	var dateString, strDay, strMonth, strYear;
	var valid = false;
				
	if (input) {
		
		dateString = trimString(input.value.toUpperCase());
		
		if (dateString == 'TODAY' || dateString == 'NOW' || dateString == 'T') {
			strDay = todaysDate.getDate().toString();
			strMonth = (todaysDate.getMonth() + 1).toString();
			
			if (strDay.length == 1) {
				strDay = "0" + strDay;
			}
			if (strMonth.length == 1) {
				strMonth = "0" + strMonth;
			}
			
			dateString = strDay + "/" + strMonth + "/" + strCurrentYear;
			valid = true;
		}
		
		else if (dateString.indexOf("TOM") != -1) {
			todaysDate.setDate(todaysDate.getDate() + 1);
			strDay = todaysDate.getDate().toString();
			strMonth = (todaysDate.getMonth() + 1).toString();
			
			if (strDay.length == 1) {
				strDay = "0" + strDay;
			}
			if (strMonth.length == 1) {
				strMonth = "0" + strMonth;
			}
			
			dateString = strDay + "/" + strMonth + "/" + strCurrentYear;
			valid = true;
		}
		
		else if (dateString.indexOf("YES") != -1) {
			todaysDate.setDate(todaysDate.getDate() - 1);
			strDay = todaysDate.getDate().toString();
			strMonth = (todaysDate.getMonth() + 1).toString();
			
			if (strDay.length == 1) {
				strDay = "0" + strDay;
			}
			if (strMonth.length == 1) {
				strMonth = "0" + strMonth;
			}
			
			dateString = strDay + "/" + strMonth + "/" + strCurrentYear;
			valid = true;
		}
		
		else if (dateString.indexOf("W+") != -1) {
			if(!isNaN(dateString.substr(dateString.indexOf("W+")+2,dateString.length))) {
				var noOfWeeks = dateString.substr(dateString.indexOf("W+")+2,dateString.length);
				todaysDate.setDate(todaysDate.getDate() + (noOfWeeks * 7));
				strDay = todaysDate.getDate().toString();
				strMonth = (todaysDate.getMonth() + 1).toString();
				strYear = (todaysDate.getYear()).toString();
				
				if (strDay.length == 1) {
					strDay = "0" + strDay;
				}
				if (strMonth.length == 1) {
					strMonth = "0" + strMonth;
				}
				
				dateString = strDay + "/" + strMonth + "/" + strYear;
				valid = true;
			}
		}
		
		else if (dateString.indexOf("W-") != -1) {
			if(!isNaN(dateString.substr(dateString.indexOf("W+")+2,dateString.length))) {
				var noOfWeeks = dateString.substr(dateString.indexOf("W+")+2,dateString.length);
				todaysDate.setDate(todaysDate.getDate() + (noOfWeeks * 7));
				strDay = todaysDate.getDate().toString();
				strMonth = (todaysDate.getMonth() + 1).toString();
				strYear = (todaysDate.getYear()).toString();
				
				if (strDay.length == 1) {
					strDay = "0" + strDay;
				}
				if (strMonth.length == 1) {
					strMonth = "0" + strMonth;
				}
				
				dateString = strDay + "/" + strMonth + "/" + strYear;
				valid = true;
			}
		}
		
		else if (dateString.indexOf("D+") != -1) {
			if(!isNaN(dateString.substr(dateString.indexOf("D+")+2,dateString.length))) {
				var noOfDays = dateString.substr(dateString.indexOf("D+")+2,dateString.length);
				todaysDate.setDate(todaysDate.getDate() + (noOfDays * 1));
				strDay = todaysDate.getDate().toString();
				strMonth = (todaysDate.getMonth() + 1).toString();
				strYear = (todaysDate.getYear()).toString();
				
				if (strDay.length == 1) {
					strDay = "0" + strDay;
				}
				if (strMonth.length == 1) {
					strMonth = "0" + strMonth;
				}
				
				dateString = strDay + "/" + strMonth + "/" + strYear;
				valid = true;
			}
		}
		
		else if (dateString.indexOf("D-") != -1) {
			if(!isNaN(dateString.substr(dateString.indexOf("D-")+2,dateString.length))) {
				var noOfDays = dateString.substr(dateString.indexOf("D-")+2,dateString.length);
				todaysDate.setDate(todaysDate.getDate() - noOfDays);
				strDay = todaysDate.getDate().toString();
				strMonth = (todaysDate.getMonth() + 1).toString();
				strYear = (todaysDate.getYear()).toString();
				
				if (strDay.length == 1) {
					strDay = "0" + strDay;
				}
				if (strMonth.length == 1) {
					strMonth = "0" + strMonth;
				}
				
				dateString = strDay + "/" + strMonth + "/" + strYear;
				valid = true;
			}
		}
			
		else if ((dateString.charAt(2) == seperator) && (dateString.charAt(5) == seperator)) {
		
			if (dateString.length == 10) {
				dateString = dateString.substr(0,2) + "/" +	dateString.substr(3,2) + "/" + dateString.substr(6,4);
				valid = true;
			}
			
			else if (dateString.length == 8) {
				if ((!isNaN(dateString.substr(0,2))) &&	(!isNaN(dateString.substr(3,2))) &&	(!isNaN(dateString.substr(6,2)))) {
					strYear = setYear(dateString.substr(6,2));		
					dateString = dateString.substr(0,2) + "/" + dateString.substr(3,2) + "/" + strYear;
					valid = true;
				}
			}
		}
		
		else if (dateString.indexOf(seperator) != -1) {
			
			var position1 = dateString.indexOf(seperator);
			var canContinue = false;
			
			if (dateString.indexOf(seperator, position1 + 1) == -1) {
				strDay = dateString.substring(0, position1);
				strMonth = dateString.substring(position1 + 1);
				
				if ((!isNaN(strDay)) && (!isNaN(strMonth))) {
					if (strDay.length == 1) {
						strDay = "0" + strDay;
					}
					else if (strDay.length == 2) {
					}
					else {
						return false;
					}
					if (strMonth.length == 1) {
						strMonth = "0" + strMonth;
					}
					else if (strMonth.length == 2) {
					}
					else {
						return false;
					}
					
					dateString = strDay + "/" +	strMonth + "/" + strCurrentYear;
					valid = true;
				}			 
			}
			else {
				var position2 = dateString.indexOf(seperator, position1 + 1) 
				var canContinue = false;
				
				strDay = dateString.substring(0, position1);
				strMonth = dateString.substring(position1 + 1, position2);
				strYear = dateString.substring(position2 + 1);
				
				if ((!isNaN(strDay)) && (!isNaN(strMonth)) && (!isNaN(strYear))) {
					if (strDay.length == 1) {
						strDay = "0" + strDay;
					}
					else if (strDay.length == 2) {
					}
					else {
						return false;
					}
					if (strMonth.length == 1) {
						strMonth = "0" + strMonth;
					}
					else if (strMonth.length == 2) {
					}
					else {
						return false;
					}
					if (strYear.length == 2) {
						strYear = setYear(strYear);
						canContinue = true;
					}
					if (strYear.length == 4) {
						canContinue = true;
					}
					
					if (canContinue) {		
						dateString = strDay + "/" +	strMonth + "/" + strYear;
						valid = true; 
					}
				}
			}
		}
		
		else if (dateString.length == 2) {
			if (!isNaN(dateString.substr(0,2)))	{
				dateString = dateString.substr(0,2) + "/" +	strCurrentMonth + "/" + strCurrentYear;
				valid = true;
			}
		}
		
		else if (dateString.length == 4) {
			if (!isNaN(dateString.substr(0,4)))	{
				dateString = dateString.substr(0,2) + "/" +	dateString.substr(2,2) + "/" + strCurrentYear;
				valid = true;
			}
		}
		
		else if (dateString.length == 6) {
			if (!isNaN(dateString.substr(0,6)))	{
				strYear = setYear(dateString.substr(4));
				dateString = dateString.substr(0,2) + "/" +	dateString.substr(2,2) + "/" + strYear;
				valid = true;
			}
		}	
		
		else if (dateString.length == 8) {
			if (!isNaN(dateString.substr(0,8)))	{
				dateString = dateString.substr(0,2) + "/" +	dateString.substr(2,2) + "/" + dateString.substr(4);
				valid = true;
			}
		}
		
				
	}
	if (valid) {
		input.value = dateString;
		return true;
	}
	else {
		return false;
	}
}

function checkDateStringForDayEntry(inputId) {
	var input = getElement(inputId);			
	var nextWeek = false;
	var lastWeek = false;
	var dateObject = new Date();
	var dayOfWeek = dateObject.getDay();
	var strDay = dateObject.getDate();
	var strMonth = dateObject.getMonth() + 1;
	var strYear = dateObject.getFullYear();
	var valid = false;
	var dateString = trimString(input.value);
	var dayFound = false;
	var dayToFind;
	
	if (dateString.indexOf('sun') != -1 || dateString.indexOf('SUN') != -1) {
		dayFound = true;
		dayToFind = 0;
	}
	if (!dayFound && (dateString.indexOf('mon') != -1 || dateString.indexOf('MON') != -1)) {
		dayFound = true;
		dayToFind = 1;
	}
	if (!dayFound && (dateString.indexOf('tue') != -1 || dateString.indexOf('TUE') != -1)) {
		dayFound = true;
		dayToFind = 2;
	}
	if (!dayFound && (dateString.indexOf('wed') != -1 || dateString.indexOf('WED') != -1)) {
		dayFound = true;
		dayToFind = 3;
	}
	if (!dayFound && (dateString.indexOf('thu') != -1 || dateString.indexOf('THU') != -1)) {
		dayFound = true;
		dayToFind = 4;
	}
	if (!dayFound && (dateString.indexOf('fri') != -1 || dateString.indexOf('FRI') != -1)) {
		dayFound = true;
		dayToFind = 5;
	}
	if (!dayFound && (dateString.indexOf('sat') != -1 || dateString.indexOf('SAT') != -1)) {
		dayFound = true;
		dayToFind = 6;
	}
				
	if (dayFound) {
			
		if (dateString.indexOf('next') != -1) {
			nextWeek = true;
		} 
		else if (dateString.indexOf('last') != -1) {
			lastWeek = true;
		}
						
		if (nextWeek) {
		
			dateObject.setDate(dateObject.getDate() + 7);
			
			if (dayOfWeek == dayToFind) {			
				strDay = dateObject.getDate();
				strMonth = dateObject.getMonth() + 1;
				strYear = dateObject.getFullYear();
				
				dateString = strDay + "/" + strMonth + "/" + strYear;
				valid = true;
			}
			else {
				for (var i = 0; i < 7; i++) {
					if (!valid) {
					
						dateObject.setDate(dateObject.getDate() + 1);
						
						if (dateObject.getDay() == dayToFind) {
						
							strDay = dateObject.getDate();
							strMonth = dateObject.getMonth() + 1;
							strYear = dateObject.getFullYear();
							
							dateString = strDay + "/" + strMonth + "/" + strYear;
							valid = true;
						}
					}
				}
			}
		}
		
		if (lastWeek) {
		
			dateObject.setDate(dateObject.getDate() - 7);
			
			if (dayOfWeek == dayToFind) {			
				strDay = dateObject.getDate();
				strMonth = dateObject.getMonth() + 1;
				strYear = dateObject.getFullYear();
				
				dateString = strDay + "/" + strMonth + "/" + strYear;
				valid = true;
			}
			else {
				for (var i = 0; i < 7; i++) {
					if (!valid) {
					
						dateObject.setDate(dateObject.getDate() + 1);
						
						if (dateObject.getDay() == dayToFind) {
						
							strDay = dateObject.getDate();
							strMonth = dateObject.getMonth() + 1;
							strYear = dateObject.getFullYear();
							
							dateString = strDay + "/" + strMonth + "/" + strYear;
							valid = true;
						}
					}
				}
			}
		}
		
		else {
			if (dayOfWeek == dayToFind) {
				dateString = strDay + "/" + strMonth + "/" + strYear;
				valid = true;
			}
			else {
				for (var i = 0; i < 7; i++) {
					if (!valid) {
					
						dateObject.setDate(dateObject.getDate() + 1);
						
						if (dateObject.getDay() == dayToFind) {
						
							strDay = dateObject.getDate();
							strMonth = dateObject.getMonth() + 1;
							strYear = dateObject.getFullYear();
							
							dateString = strDay + "/" + strMonth + "/" + strYear;
							valid = true;
						}
					}
				}
			}
		}
	}
	if (valid) {
		input.value = dateString;
		return true;
	}
	else {
		return false;
	}
}

function daysInMonthYear(month, year) 
{
	return 32 - new Date(year, month, 32).getDate();
}

function trimString(inputString) 
{
	return inputString.replace(/^\s+|\s+$/, ''); 
}

function setYear(strYear) 
{
	var minYear = 1930;
	var maxYear = 2029;
	var cutOffYear = 30;
	var year = parseInt(strYear);
					
	if (year >= cutOffYear) {
		strYear = "19" + strYear;
	} 
	else {
		strYear = "20" + strYear;
	}
	return strYear;
}
