function eCalendarCheck(eCal) {
	return eCal.checkDate();
}

function eCalendar(form, prefix, startDate, endDate) {
	var _form = document.forms[form];
	var _prefix = prefix;

	var _startDate_day = _form.elements[prefix+"_startDate_day"];
	var _startDate_my = _form.elements[prefix+"_startDate_monthYear"];
	var _endDate_day = _form.elements[prefix+"_endDate_day"];
	var _endDate_my = _form.elements[prefix+"_endDate_monthYear"];

	// setting date default values ... 
	if ( startDate ) {
		var _startDate = startDate.split('-');
		_startDate_day.value = _format(_startDate[2]);
		_startDate_my.value = _format(_startDate[1]+"_"+_startDate[0]);
	} else {
		_startDate_day.value = "";
		_startDate_my.value = "";
	}

	if ( endDate ) {
		var _endDate = endDate.split('-');
		_endDate_day.value = _format(_endDate[2]);
		_endDate_my.value = _format(_endDate[1]+"_"+_endDate[0]);
	} else {
		_endDate_day.value = "";
		_endDate_my.value = "";
	}

	var _userCheck;
	var _onBadDate;
	var _userOnDateChange = function() { return true; };

	function _format(value) {
		var str = new String(value);
		if ( str.length == 1 ) {
			return "0"+str;
		}
		return value;
	}

	function _makeDate(year, month, day) {
		var _date = new Date();

		_date.setYear(year);
		_date.setMonth(month-1, day);

		return _date;
	}

	function _setValues(_day, _my, year, month, day) {
		_day.value = _format(day);
		_my.value = _format(month)+"_"+year;
	}

	function _getStartDate() {
		var tmp = _startDate_my.value.split("_");
		return _makeDate(tmp[1], tmp[0], _startDate_day.value);
	}	
		
	function _getEndDate() {
		var tmp = _endDate_my.value.split("_");
		return _makeDate(tmp[1], tmp[0], _endDate_day.value);
	}

	function _setStartDate(d) {
		var tmp = d.split('-');
		_setValues(_startDate_day, _startDate_my, tmp[0], tmp[1], tmp[2]);
	}

	function _setEndDate(d) {
		var tmp = d.split('-');
		_setValues(_endDate_day, _endDate_my, tmp[0], tmp[1], tmp[2]);
	}

	function _dateSet(t) {
		switch(t) {
			case 's':
				if ( _startDate_day.value != "" && _startDate_my.value != "" )
					return true;
				else 
					return false;

			case 'e':
				if ( _endDate_day.value != "" && _endDate_my.value != "" )
					return true; 
				else 
					return false;
		}
	}

	function _check() {
		if ( _startDate_day.value == "" || _endDate_day.value == "" ) 
			return false;
		

		if ( _startDate_my.value == "" || _endDate_my.value == "" ) 
			return false;

		var startDate = _getStartDate();
		var endDate = _getEndDate();

		_setValues(_startDate_day, _startDate_my, startDate.getFullYear(), startDate.getMonth()+1, startDate.getDate());
		_setValues(_endDate_day, _endDate_my, endDate.getFullYear(), endDate.getMonth()+1, endDate.getDate());

		if ( typeof(_userCheck) == "function" ) {
			if (  _userCheck() ) {
				return true;
			} else {
				return false;
			}
		}
		
		return true;
	}

	function _onDateChange() {
		var d_s = _dateSet('s');
		var d_e = _dateSet('e');

		// if end date not set, than set it to start date + 1 day
		if ( d_s && !d_e ) {
			var d = _getStartDate();
			d.setDate(d.getDate()+1);
			_setValues(_endDate_day, _endDate_my, d.getFullYear(), d.getMonth()+1, d.getDate());
		}
	}

	function _getValue(element) {
		return document.getElementById(element).value;
	}

	this.getStartDate = _getStartDate;
	this.getEndDate = _getEndDate;

	this.checkDate = function() {
		return _check();
	}

	this.set_onBadDate = function(f) {
		_onBadDate = f;
	}

	this.set_userCheck = function(f) {
		_userCheck = f;
	}

	this.set_onDateChange = function(f) {
		_userOnDateChange = f;
	}

	this.setStartDate = function(d) {
		_setStartDate(d);
		_onDateChange();
	}

	this.setEndDate = function(d) {
		_setEndDate(d);
		_onDateChange();
	}

	this.setToday = function() {
		var day = new Date();
		_setValues(_startDate_day, _startDate_my, day.getFullYear(), day.getMonth()+1, day.getDate());
	}

	// this is used from form
	this.update = function() {
		if ( _dateSet('s') || _dateSet('e') ) {
			_onDateChange();
			_userOnDateChange();
		}
	}
}
