//----------------------------------------------------------------------------
// Name: positionInfo()
// Role: Determine the current position on the page of the specified object
//----------------------------------------------------------------------------
function positionInfo( object ) {

var p_elm = object;

this.getElementLeft = getElementLeft;
function getElementLeft() {
  var x = 0;
  var elm;
  if(typeof(p_elm) == "object"){
	elm = p_elm;
  } else {
	elm = document.getElementById(p_elm);
  }
  while (elm != null) {
	x+= elm.offsetLeft;
	elm = elm.offsetParent;
  }
  return parseInt(x);
}

this.getElementWidth = getElementWidth;
function getElementWidth(){
  var elm;
  if(typeof(p_elm) == "object"){
	elm = p_elm;
  } else {
	elm = document.getElementById(p_elm);
  }
  return parseInt(elm.offsetWidth);
}

this.getElementRight = getElementRight;
function getElementRight(){
  return getElementLeft(p_elm) + getElementWidth(p_elm);
}

this.getElementTop = getElementTop;
function getElementTop() {
  var y = 0;
  var elm;
  if(typeof(p_elm) == "object"){
	elm = p_elm;
  } else {
	elm = document.getElementById(p_elm);
  }
  while (elm != null) {
	y+= elm.offsetTop;
	elm = elm.offsetParent;
  }
  return parseInt(y);
}

this.getElementHeight = getElementHeight;
function getElementHeight(){
  var elm;
  if(typeof(p_elm) == "object"){
	elm = p_elm;
  } else {
	elm = document.getElementById(p_elm);
  }
  return parseInt(elm.offsetHeight);
}

this.getElementBottom = getElementBottom;
function getElementBottom(){
  return getElementTop(p_elm) + getElementHeight(p_elm);
}
}

//----------------------------------------------------------------------------
// Name: CalendarControl()
// Role: Object used to generate the desired calendar HTML
//----------------------------------------------------------------------------
function CalendarControl() {

var calendarId    = 'CalendarControl2';
var currentYear   = 0;
var currentMonth  = 0;
var currentDay    = 0;

var selectedYear  = 0;
var selectedMonth = 0;
var selectedDay   = 0;

//  var months = 'January,February,March,April,May,June,July,August,September,October,November,December'.split( ',' );
var months = 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split( ',' );
var dateField = null;

function getProperty(p_property){
  var p_elm = calendarId;
  var elm = null;

  if(typeof(p_elm) == "object"){
	elm = p_elm;
  } else {
	elm = document.getElementById(p_elm);
  }
  if (elm != null){
	if(elm.style){
	  elm = elm.style;
	  if(elm[p_property]){
		return elm[p_property];
	  } else {
		return null;
	  }
	} else {
	  return null;
	}
  }
}

function setElementProperty(p_property, p_value, p_elmId){
  var p_elm = p_elmId;
  var elm = null;

  if(typeof(p_elm) == "object"){
	elm = p_elm;
  } else {
	elm = document.getElementById(p_elm);
  }
  if((elm != null) && (elm.style != null)){
	elm = elm.style;
	elm[ p_property ] = p_value;
  }
}

function setProperty(p_property, p_value) {
  setElementProperty(p_property, p_value, calendarId);
}

function getDaysInMonth(year, month) {
  return [31,((!(year % 4 ) && ( (year % 100 ) || !( year % 400 ) ))?29:28),31,30,31,30,31,31,30,31,30,31][month-1];
}

function getDayOfWeek(year, month, day) {
  var date = new Date(year,month-1,day)
  return date.getDay();
}

this.setDate = setDate;
function setDate(year, month, day) {
  if (dateField) {
	if (month < 10) {month = "0" + month;}
	if (day < 10) {day = "0" + day;}

	var dateString = month+"/"+day+"/"+year;
	dateField.value = dateString;
	hide();
  }
  return;
}

this.changeMonth = changeMonth;
function changeMonth( change ) {
  currentMonth += change;
  currentDay = 0;
  if ( currentMonth > 12 ) {
	currentMonth = 1;
	currentYear++;
  } else if( currentMonth < 1 ) {
	currentMonth = 12;
	currentYear--;
  }

  calendar = document.getElementById( calendarId );
  calendar.innerHTML = calendarDrawTable();
}

this.setMonth = setMonth;
function setMonth( mon ) {
  currentMonth = mon + 1;
  currentDay = 0;
  calendar = document.getElementById( calendarId );
  calendar.innerHTML = calendarDrawTable();
}

this.changeYear = changeYear;
function changeYear( change ) {
  currentYear += change;
  currentDay = 0;
  calendar = document.getElementById(calendarId);
  calendar.innerHTML = calendarDrawTable();
}

function getCurrentYear() {
  var year = new Date().getYear();
  if(year < 1900) year += 1900;
  return year;
}

function getCurrentMonth() {
  return new Date().getMonth() + 1;
}

function getCurrentDay() {
  return new Date().getDate();
}

function calendarDrawTable() {

  var dayOfMonth     = 1;
  var validDay       = 0;
  var startDayOfWeek = getDayOfWeek(currentYear, currentMonth, dayOfMonth);
  var daysInMonth    = getDaysInMonth(currentYear, currentMonth);
  var css_class      = null; //CSS class for each day

  var pickMonth = '<select onchange="calendarControl.setMonth(this.selectedIndex)">';
  for ( var mon = 0; mon < months.length; mon++ ) {
	var sel = ( mon == ( currentMonth - 1 ) ) ? ' selected' : '';
	pickMonth += '<option' + sel + '>' + months[ mon ] + '<\/option>';
  }
  pickMonth += '<\/select>';

  var pickYear = '<select onchange="calendarControl.changeYear(this.selectedIndex - 5)">';
  for ( var y = -5; y < 6; y++ ) {
	var sel = ( y == 0 ) ? ' selected' : '';
	pickYear += '<option' + sel + '>' + ( currentYear + y ) + '<\/option>';
  }
  pickYear += '<\/select>';

  var table = "<table cellspacing='0' cellpadding='0' border='1'>";
  table = table + "<tr class='header'>";
  table = table + "  <td colspan='7' class='title' align='center'>" + pickMonth + " " + pickYear + "</td>";
  table = table + "</tr>";
  table = table + "<tr><th>S</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th></tr>";

  for(var week=0; week < 6; week++) {
	table = table + "<tr>";
	for(var dayOfWeek=0; dayOfWeek < 7; dayOfWeek++) {
	  if(week == 0 && startDayOfWeek == dayOfWeek) {
		validDay = 1;
	  } else if (validDay == 1 && dayOfMonth > daysInMonth) {
		validDay = 0;
	  }

	  if(validDay) {
		if (dayOfMonth == selectedDay && currentYear == selectedYear && currentMonth == selectedMonth) {
		  css_class = 'current';
		} else if (dayOfWeek == 0 || dayOfWeek == 6) {
		  css_class = 'weekend';
		} else {
		  css_class = 'weekday';
		}

		table = table + "<td><a class='"+css_class+"' href=\"http://www.destinationstjohns.com/eventsCalendar.asp?y="+currentYear+"&m="+currentMonth+"&d="+dayOfMonth+"\">"+dayOfMonth+"</a></td>";
		dayOfMonth++;
	  } else {
		table = table + "<td class='empty'>&nbsp;</td>";
	  }
	}
	table = table + "</tr>";
  }

  //table = table + "<tr class='header'><th colspan='7' style='padding: 3px;'><a href='javascript:hideCalendarControl();'>Close</a></td></tr>";
  //table = table + "</table>";

  return table;
}

this.show = show;
function show(field) {

  // If the calendar is visible and associated with
  // this field do not do anything.
  if (dateField == field) {
	return;
  } else {
	dateField = field;
  }

  if(dateField) {
	try {
	  var dateString = new String(dateField.value);
	  var dateParts = dateString.split("-");

	  selectedMonth = parseInt(dateParts[0],10);
	  selectedDay = parseInt(dateParts[1],10);
	  selectedYear = parseInt(dateParts[2],10);
	} catch(e) {}
  }

  if (!(selectedYear && selectedMonth && selectedDay)) {
	selectedMonth = getCurrentMonth();
	selectedDay   = getCurrentDay();
	selectedYear  = getCurrentYear();
  }

  currentMonth = selectedMonth;
  currentDay   = selectedDay;
  currentYear  = selectedYear;

  if(document.getElementById){

	calendar = document.getElementById(calendarId);
	calendar.innerHTML = calendarDrawTable(currentYear, currentMonth);

	setElementProperty('display', 'block', 'CalendarControlIFrame');
	setProperty('display', 'block');

	var fieldPos = new positionInfo(dateField);
	var calendarPos = new positionInfo(calendarId);

	var x = fieldPos.getElementLeft();
	var y = fieldPos.getElementBottom();

	setProperty('left', x + "px");
	setProperty('top', y + "px");
	setElementProperty('left', x + "px", 'CalendarControlIFrame');
	setElementProperty('top', y + "px", 'CalendarControlIFrame');
	setElementProperty('width', calendarPos.getElementWidth() + "px", 'CalendarControlIFrame');
	setElementProperty('height', calendarPos.getElementHeight() + "px", 'CalendarControlIFrame');
  }
}

this.hide = hide;
function hide() {
  if(dateField) {
	setProperty('display', 'none');
	setElementProperty('display', 'none', 'CalendarControlIFrame');
	dateField = null;
  }
}

}

var calendarControl;

function showCalendarControl(textField) {
calendarControl.show(textField);
}

function hideCalendarControl() {
calendarControl.hide();
}

function setCalendarControlDate(year, month, day) {
calendarControl.setDate(year, month, day);
}

function changeCalendarControlYear(change) {
calendarControl.changeYear(change);
}

function changeCalendarControlMonth(change) {
calendarControl.changeMonth(change);
}

function init() {
//  alert( 'init()' );
var field = document.getElementById( 'myDate' );

calendarControl = new CalendarControl();
if ( field ) {
  if ( field.value == '' ) {
	var date = new Date();
	field.value = ( date.getMonth() + 1 ) +  '-' + date.getDate() + '-' + date.getFullYear();
  }
  calendarControl.show( field );
}
}