var months = new Array();
months[1] = "January";
months[2] = "February";
months[3] = "March";
months[4] = "April";
months[5] = "May";
months[6] = "June";
months[7] = "July";
months[8] = "August";
months[9] = "September";
months[10] = "October";
months[11] = "November";
months[12] = "December";
function showCalendar(posX, posY, d, m, y, noSel) {
	var html = '<a href="#" onclick="hideCalendar(event)" id="hideCalendar"><img src="/img/cal_close.gif" width="30" height="30" alt="Close" title="close" /></a><div id="innerCalendar"></div>';
	$('calendar').innerHTML = html;
	buildCalendar(d, m, y, noSel);
	$('calendar').show();
	$('calendar').setStyle({
		left: posX+'px',
		top: posY+'px'
	});
	return false;
}
function buildCalendar(d, m, y, noSel, event) {
	if (event)
		Event.stop(event);
	var date = new Date();
	d = d || date.getDate();
	m = m || (date.getMonth()+1);
	y = y || date.getFullYear();
	
	date.setFullYear(y, m-1, d);
	
	var dateTmp = new Date();
	dateTmp.setFullYear(y, m-1, 1);
	var html = '<table>';
	
	var prevMonth = parseInt(date.getMonth());
	var prevYear = date.getFullYear();
	if (prevMonth == 0) {
		prevMonth = 12;
		prevYear--;
	}
	var nextMonth = parseInt(date.getMonth()+2);
	var nextYear = date.getFullYear();
	if (nextMonth == 13) {
		nextMonth = 1;
		nextYear++;
	}
	html+= '<tr>';
	html+= '<td id="previous"><a href="#" onclick="buildCalendar(1, '+prevMonth+', '+prevYear+', true, event)"><img src="/img/previous.gif" width="9" height="9" alt="Previous" /></a></td>';
	html+= '<td colspan="5" class="month">'+months[parseInt(date.getMonth()+1)]+' '+date.getFullYear()+'</td>';
	html+= '<td id="next"><a href="#" onclick="buildCalendar(1, '+nextMonth+', '+nextYear+', true, event)"><img src="/img/next.gif" width="9" height="9" alt="Next" /></a></td>';
	html+= '</tr>';
	
	html+= '<tr>';
	html+= '<th>S</th>';
	html+= '<th>M</th>';
	html+= '<th>T</th>';
	html+= '<th>W</th>';
	html+= '<th>TH</th>';
	html+= '<th>F</th>';
	html+= '<th>S</th>';
	html+= '</tr>';
	
	if (dateTmp.getDay() > 0) {
		var diff = dateTmp.getDay();
		if (dateTmp.getDate() <= diff) {
			if (dateTmp.getMonth() == 0) {
				// January
				dateTmp.setDate(31-diff+1);
				dateTmp.setMonth(11);
				dateTmp.setFullYear(dateTmp.getFullYear()-1);
			} else {
				var month = dateTmp.getMonth()-1;
				var nbDay = nbDayMonth(month, dateTmp.getFullYear());
				dateTmp.setFullYear(dateTmp.getFullYear(), month, nbDay-diff+1);
			}
		} else {
			dateTmp.setDate(dateTmp.getDate()-diff+1);
		}
	}
	
	var first = true;
	var cssClass;
	while(dateTmp.getTime() <= date.getTime()) {
		if (dateTmp.getDay() == 0) {
			if (!first)
				html+= '</tr>';
			html+= '<tr>';
		}
		cssClass = '';
		if (dateTmp.getMonth() != date.getMonth())
			cssClass = 'otherMonth';
		else if (dateTmp.getDate() == date.getDate() && !noSel)
			cssClass = 'selected';
		html+= '<td>'+buildLink(dateTmp, cssClass)+'</td>';
		dateTmp.setDate(dateTmp.getDate()+1);
	}
	while(dateTmp.getMonth() == date.getMonth()) {
		if (dateTmp.getDay() == 0) {
			if (!first)
				html+= '</tr>';
			html+= '</tr><tr>';
		}
		cssClass = '';
		if (dateTmp.getMonth() != date.getMonth())
			cssClass = 'otherMonth';
		else if (dateTmp.getDate() == date.getDate() && !noSel)
			cssClass = 'selected';
		html+= '<td>'+buildLink(dateTmp, cssClass)+'</td>';
		dateTmp.setDate(dateTmp.getDate()+1);
	}
	while(dateTmp.getDay() != 0) {
		if (dateTmp.getDay() == 0) {
			if (!first)
				html+= '</tr>';
			html+= '<tr>';
		}
		cssClass = '';
		if (dateTmp.getMonth() != date.getMonth())
			cssClass = 'otherMonth';
		else if (dateTmp.getDate() == date.getDate() && !noSel)
			cssClass = 'selected';
		html+= '<td>'+buildLink(dateTmp, cssClass)+'</td>';
		dateTmp.setDate(dateTmp.getDate()+1);
	}
	html+= '</tr>';
	
	html+= '</table>';
	$('innerCalendar').innerHTML = html;
	
	return false;
}
function nbDayMonth(m, y) {
	var nbDayMonth = 1;
	for (j=27;j<33;j++){
		var cDate = new Date();
		cDate.setFullYear(y, m, j);
		if (cDate.getDate() == 1) {
			nbDayMonth = j-1;
			break;
		}
	}
	return nbDayMonth;
}
function buildLink(date, cssClass) {
	cssClass = cssClass || '';
	return '<a href="#" onclick="chooseDate('+date.getDate()+', '+parseInt(date.getMonth()+1)+', '+date.getFullYear()+', event);" class="'+cssClass+'">'+date.getDate()+'</a>';
}
function hideCalendar(event) {
	Event.stop(event);
	$('calendar').hide();
	return false;
}

/*
prototypeUtils.js from http://jehiah.com/
Licensed under Creative Commons.
version 1.0 December 20 2005

Contains:
+ Form.Element.setValue()
+ unpackToForm()

*/

/* Form.Element.setValue("fieldname/id","valueToSet") */
Form.Element.setValue = function(element,newValue) {
    element_id = element;
    element = $(element);
    if (!element){element = document.getElementsByName(element_id)[0];}
    if (!element){return false;}
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.SetSerializers[method](element,newValue);
}

Form.Element.SetSerializers = {
  input: function(element,newValue) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.SetSerializers.textarea(element,newValue);
      case 'checkbox':
      case 'radio':
        return Form.Element.SetSerializers.inputSelector(element,newValue);
    }
    return false;
  },

  inputSelector: function(element,newValue) {
    fields = document.getElementsByName(element.name);
    for (var i=0;i<fields.length;i++){
      if (fields[i].value == newValue){
        fields[i].checked = true;
      }
    }
  },

  textarea: function(element,newValue) {
    element.value = newValue;
  },

  select: function(element,newValue) {
    var value = '', opt, index = element.selectedIndex;
    for (var i=0;i< element.options.length;i++){
      if (element.options[i].value == newValue){
        element.selectedIndex = i;
        return true;
      }        
    }
  }
}