Hi, Just thought I'd share this lovely bit code from CalendarLayout. Anyway want to have a go at rewriting it so that's its human readable?
I particular like: - How it possible to get a value of s1 (eg 10) that's not in the switch statement. - There's a check for !startDate first but the check for !endDate is last - Comparisons use a mixture of < and <= and > and >= There's a bug here - karma points for anyone who can work it out. mx_internal function removeRangeFromSelection(startDate:Date, endDate:Date):void { for (var n:int = 0; n < selectedRangeCount; n++) { var s1:int; if (!startDate || startDate <= _selectedRanges[n].rangeStart) s1 = 1; else if (startDate <= _selectedRanges[n].rangeEnd) s1 = 2; else if (startDate > _selectedRanges[n].rangeEnd) s1 = 3; if (endDate < _selectedRanges[n].rangeStart) s1 *= 5; else if (endDate < _selectedRanges[n].rangeEnd) s1 *= 7; else if (!endDate || endDate >= _selectedRanges[n].rangeEnd) s1 *= 11; switch (s1) { case 5: case 33: break; case 14: { var temp:Date = _selectedRanges[n].rangeEnd; _selectedRanges[n].rangeEnd = incrementDate(startDate,-1); _selectedRanges[selectedRangeCount] = {}; _selectedRanges[selectedRangeCount].rangeStart = incrementDate(endDate); _selectedRanges[selectedRangeCount].rangeEnd = temp; selectedRangeCount += 1; break; } case 7: { _selectedRanges[n].rangeStart = incrementDate(endDate); break; } case 22: { _selectedRanges[n].rangeEnd = incrementDate(startDate,-1); break; } case 11: { _selectedRanges[n] = _selectedRanges[selectedRangeCount-1]; _selectedRanges[selectedRangeCount-1] = null; selectedRangeCount -= 1; break; } } } } Thanks, Justin