
// JavaScript Date Selector Tool
//Adam Bergstein

function DateDetermineX(event){
	var isNN = document.layers ? true : false;
	var isIE = document.all ? true : false;
	//alert("nn="+isNN+",ie="+isIE);
	mouseX = isIE ? window.event.clientX : event.pageX;
	mouseY = isIE ? window.event.clientY : event.pageY;
	//alert("Mouse: X="+mouseX+",Y="+mouseY);
	
	if(isIE){
		mouseX = parseInt(mouseX) + 20;
	} else {
		mouseX = parseInt(mouseX) + 40;
	}
	
	return mouseX;
}

function DateDetermineY(event){
	var isNN = document.layers ? true : false;
	var isIE = document.all ? true : false;
	//alert("nn="+isNN+",ie="+isIE);
	mouseX = isIE ? window.event.clientX : event.pageX;
	mouseY = isIE ? window.event.clientY : event.pageY;
	//alert("Mouse: X="+mouseX+",Y="+mouseY);
	
	if(isIE){
		mouseX = parseInt(mouseX) + 20;
	} else {
		mouseX = parseInt(mouseX) + 40;
	}
	
	return mouseY;
}

function RunCalendar(in_X, in_Y, idField, formField, hiddenField, formatString, inMonth, inDay, inYear){
	//alert(inMonth+' '+inDay+' '+inYear);
	if(inMonth == null || inDay == null || inYear == null){
		var dd = new Date();
		var cal = new Calendar(dd.getMonth(),dd.getDate(),dd.getFullYear());
	} else {
		if(inMonth=="12"){
			inMonth = "0";
		}
		
		var cal = new Calendar(inMonth,inDay,inYear);
	}
	
	//+document.getElementById("CalendarImage1").offsetLeft
	//+document.getElementById("CalendarImage1").offsetTop
	/*pos_x = event.offsetX?(event.offsetX):event.pageX+event.offsetLeft;

    pos_y = event.offsetY?(event.offsetY):event.pageY+event.offsetTop;

	alert(pos_x+', '+pos_y);*/
	
	/*var isNN = document.layers ? true : false;
	var isIE = document.all ? true : false;
	//alert("nn="+isNN+",ie="+isIE);
	mouseX = isIE ? window.event.clientX : event.pageX;
	mouseY = isIE ? window.event.clientY : event.pageY;
	//alert("Mouse: X="+mouseX+",Y="+mouseY);
	
	if(isIE){
		mouseX = parseInt(mouseX) + 20;
	} else {
		mouseX = parseInt(mouseX) + 40;
	}*/
	
	/*document.getElementById(idField).style.top = mouseX;
	document.getElementById(idField).style.left = mouseY;*/
	
	
	cal.generateCalendar(idField, formField, hiddenField, formatString, in_X, in_Y);
}

function Calendar(month, day, year){
	this._month = month; //indexed starting at 0
	this._day = day;
	this._year = year;
	this._days = Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
	this._months = Array("January","February","March","April","May","June","July","August","September","October","November","December");
}

Calendar.prototype._month;
Calendar.prototype._day;
Calendar.prototype._year;
Calendar.prototype._days;
Calendar.prototype._months;

Calendar.prototype.daysInMonth = function() {
	/*var dd = new Date(this._year, this._month, 0);
	return dd.getDate();*/
	var m = [31,28,31,30,31,30,31,31,30,31,30,31];
	if (this._month != 1) return m[this._month];
	if (this._year%4 != 0) return m[1];
	if (this._year%100 == 0 && this._year%400 != 0) return m[1];
	return m[1] + 1;

}

Calendar.prototype.dayOfWeek = function() {
	var dd = new Date(this._year, this._month, this._day);
	return dd.getDay();
}

Calendar.prototype.generateFormat = function(formatString, inMonth, inDay, inYear){
	var generatedString = '';
	for(var i=0; i<formatString.length; i++){
		switch(formatString.charAt(i)){
			case 'd':
				generatedString = generatedString + inDay;
				break;
			case 'm':
				generatedString = generatedString + inMonth;
				break;
			case 'y':
				generatedString = generatedString + inYear;
				break;
			default:
				generatedString = generatedString + formatString.charAt(i);
				break;
		}
	}
	
	return generatedString;
}

Calendar.prototype.generateCalendar = function(idField, formField, hiddenField, returnFormat, posx, posy){
	var firstDay = new Calendar(this._month, 1, this._year);
	var lastDayNumber = this.daysInMonth();
	var startDayIndex = firstDay.dayOfWeek();
	var dayTracker = 0;
	
	
	
	var prevMonth = (parseInt(this._month)-1);
	var nextMonth = (parseInt(this._month)+1);
	var prevYear = this._year;
	var nextYear = this._year;
	var lastMonthYear = this._year;
	var nextMonthYear = this._year;
	prevYear = parseInt(prevYear)-1;
	nextYear = parseInt(nextYear)+1;
	
	if(prevMonth == -1){
		lastMonthYear = parseInt(lastMonthYear)-1;
		prevMonth = 11;
	}
	
	if(nextMonth == 12){
		nextMonthYear = parseInt(nextMonthYear)+1;
		nextMonth = '0';
	}
	
	
	var newCal = document.createElement('table');
	newCal.cellPadding = '2px';
	newCal.cellSpacing = '0px';
	newCal.border = "1";
	newCal.className = 'CalendarBox';
	newCal.style.position = 'absolute';
	newCal.style.left = posx+'px';
	newCal.style.top = posy+'px';
	newCal.style.zIndex = '100';
	
	nextRow = newCal.insertRow(0);
	
	nextCell = nextRow.insertCell(0);
	nextCell.colSpan = '7';
	nextCell.className = 'HeaderRow';
	nextCell.innerHTML = '<div style="float: left; display: inline; width: 22px;"><a align="left" href="javascript: RunCalendar('+posx+', '+posy+', \''+idField+'\', \''+formField+'\', \''+hiddenField+'\', \''+returnFormat+'\', \''+this._month+'\', \'1\', \''+prevYear+'\'); "><<&nbsp;</a><a align="left"  href="javascript: RunCalendar('+posx+', '+posy+', \''+idField+'\', \''+formField+'\', \''+hiddenField+'\', \''+returnFormat+'\', \''+prevMonth+'\', \'1\', \''+lastMonthYear+'\'); ">--</a></div><div style="display: inline; float: left; text-align: center; width: 124px;">'+this._months[this._month]+' '+this._year+'</div><div style="float: left; display: inline;  width: 18px;"><a align="right" href="javascript: RunCalendar('+posx+', '+posy+', \''+idField+'\', \''+formField+'\', \''+hiddenField+'\', \''+returnFormat+'\', \''+nextMonth+'\', \'1\', \''+nextMonthYear+'\');">--</a><a href="javascript: RunCalendar('+posx+', '+posy+', \''+idField+'\', \''+formField+'\', \''+hiddenField+'\', \''+returnFormat+'\', \''+this._month+'\', \'1\', \''+nextYear+'\'); ">&nbsp;>></a></div>';
	
	/*nextCell = nextRow.insertCell(1);
	nextCell.className = 'HeaderRow';
	nextCell.colSpan = '5';
	nextCell.innerHTML = this._months[this._month]+' '+this._year;
	
	nextCell = nextRow.insertCell(2);
	nextCell.className = 'HeaderRow';
	nextCell.innerHTML = '';*/
	
	
	
	nextRow = newCal.insertRow(1);
	for(var i=0; i<this._days.length; i++){
		nextCell = nextRow.insertCell(i);
		nextCell.className = 'LabelDay';
		nextCell.innerHTML = this._days[i].charAt(0);
	}
	
	nextRow = newCal.insertRow(2);
	var rowCounter = 3;
	var cellCounter = 0;
	
	for(; dayTracker<startDayIndex; dayTracker++){
		nextCell = nextRow.insertCell(cellCounter);
		nextCell.className = 'BlankDay';
		nextCell.innerHTML = '&nbsp;';
		cellCounter++;
	}
	
	for(var i=1; i<=lastDayNumber; i++){
		if(dayTracker%7==0 && dayTracker!=0){
			nextRow = newCal.insertRow(rowCounter);
			rowCounter++;
			cellCounter = 0;
		}
		
		var monthDisplay = (parseInt(this._month)+1);
		
		nextCell = nextRow.insertCell(cellCounter);
		nextCell.className = 'NormalDay';
		nextCell.innerHTML = '<a onclick="document.getElementById(\''+formField+'\').innerHTML=\''+this.generateFormat(returnFormat,monthDisplay,i,this._year)+'\'; document.getElementById(\''+hiddenField+'\').value=\''+this.generateFormat(returnFormat,monthDisplay,i,this._year)+'\'; document.getElementById(\''+idField+'\').innerHTML=\'\';">'+i+'</a>';
		dayTracker++;
		cellCounter++;
	}
	
	if((dayTracker%7)!=0){
		for(var i=(dayTracker%7); i<7; i++){
			nextCell = nextRow.insertCell(cellCounter);
			nextCell.className = 'BlankDay';
			nextCell.innerHTML = '&nbsp;';
			cellCounter++;
		}
	}
	
	nextRow = newCal.insertRow(rowCounter);
	nextCell = nextRow.insertCell(0);
	nextCell.className = 'HeaderRow';
	nextCell.colSpan='7';
	nextCell.innerHTML = '<a onclick="javascript: document.getElementById(\''+idField+'\').innerHTML = \'\';" style="cursor: pointer;">Click here to cancel</a>';
	
	
	document.getElementById(idField).innerHTML = '';
	document.getElementById(idField).appendChild(newCal);
	
}
