var dayStart = null;var dayEnd = null;
var daySpan = 1;var specialDay = null;
var calStartDate = null; var calEndDate = null;

function callbackDateDal(cal) {
	//if (!confirm("callbackDateDal")) return
	
	var field = document.getElementById('inpDateDal')
	
	if (!dateIsSpecial(cal.date)) {
		//if (!confirm("dateIsSpecial")) return
		var date = findFirstSpecial(cal.date,1);
		field.value = date.print("%Y%m%d");
		calStartDate.setDate(date);
	} else {
		var date = cal.date;
		field.value = date.print('%Y%m%d');
	}

	if (calStartDate.date >= calEndDate.date) {
		var datevar = calStartDate.date;
        var field = document.getElementById("inpDateAl");
        datevar = findFirstSpecial(datevar,1);
        //if (!confirm("callbackDateDal " + datevar)) return
        if (datevar > getOnlyDate(new Date())) {
			field.value = datevar.print("%Y%m%d");
			calEndDate.setDate(datevar);
		}
	}
}

function callbackDateAl(cal) {
	var field = document.getElementById('inpDateAl')
	
	if (!dateIsSpecial(cal.date)) {
		//if (!confirm("dateIsSpecial")) return
		var date = findFirstSpecial(cal.date,1);
		field.value = date.print("%Y%m%d");
		calEndDate.setDate(date);
	} else {
		var date = cal.date;
		field.value = date.print('%Y%m%d');
	}

	if (calStartDate.date >= calEndDate.date) {
		//if (!confirm("callbackDateAl")) return
		var datevar = calEndDate.date;
        var field = document.getElementById("inpDateDal");
        datevar = findFirstSpecial(datevar,-1);
        if (datevar > getOnlyDate(new Date())) {
			field.value = datevar.print("%Y%m%d");
			calStartDate.setDate(datevar);
		} else {
			callbackDateDal(calStartDate);
		}
	}
}

function dateIsSpecial(date) {
	if (getOnlyDate(new Date()) >= date) return false;
	if (specialDay==null)
		return true;
	if (date.getDay() == specialDay)
		return true;
};

function ourDateStatusFunc(date, y, m, d) {
	if (dateIsSpecial(getOnlyDate(date)))
	  return false;
	else
	  return true;
	  // return true if you want to disable other dates
};

function setStartEnd(start, daySpan) {
	if (!dateIsSpecial(start)) {
		start = findFirstSpecial(start,1);
	}
	var end = addDays(start,daySpan,1);
	if (!dateIsSpecial(end)) {
		end = findFirstSpecial(end,1);
	}
	setStart(start);
	setEnd(end);
}

function setStart(date) {
	calStartDate.setDate(date);
	var field = document.getElementById('inpDateDal')
	field.value = calStartDate.date.print("%Y%m%d");
}

function setEnd(date) {
	calEndDate.setDate(date);
	var field = document.getElementById('inpDateAl')
	field.value = calEndDate.date.print("%Y%m%d");
}

function getOnlyDate(date) {
	date.setHours(0);
	date.setMinutes(0);
	date.setSeconds(0);
	date.setMilliseconds(0);
	return date;
}

function findFirstSpecial(date, direction) {
	var lastDate = date
	if (direction==null) direction = 1;
	do {
		date = addDays(date,1,direction);
		date = getOnlyDate(date);
		//if (!confirm("findFirstSpecial " + date)) return
		if (date <= getOnlyDate(new Date()) && direction  < 0 ) return date
	} while (!dateIsSpecial(date))
	return getOnlyDate(date);
}

function addDays(date, amount, direction) {
	var time = date.getTime();
	time += amount * 86400000 * direction;
	date = new Date(time);
	return getOnlyDate(date);
}

function createCalendars() {
	var divCal = document.getElementById('divLoadingCalendar');
	divCal.style.display = 'none';
	setInitialValues();

	calStartDate = Calendar.setup(  {
		flat : 'tdStartDate', 
		dateStatusFunc : ourDateStatusFunc,
		flatCallback : callbackDateDal
		}
	);

	calEndDate = Calendar.setup(  {  
		flat : 'tdEndDate', 
		dateStatusFunc : ourDateStatusFunc,
		flatCallback : callbackDateAl
		}
	);
	
	if (dayStart!=null && dayEnd != null) {
		var dStart = new Date(dayStart.substr(0,4),dayStart.substr(4,2)-1,dayStart.substr(6,2));
		var dEnd = new Date(dayEnd.substr(0,4),dayEnd.substr(4,2)-1,dayEnd.substr(6,2));
		setStart(dStart);
		setEnd(dEnd);
	} else {
		setStartEnd(getOnlyDate(new Date()),daySpan);
	}

}
document.body.onLoad = createCalendars();
