dob_mc.input_txt.onChanged = function():Void { var len:Number = this.text.length; var pieces:Array = this.text.split('/', 3); this.maxChars = 10; Selection.setFocus(this); if (len == 0 || (pieces.length < 3 && pieces.length > 1)) { this.text = 'mm/dd/yyyy'; Selection.setSelection(0, 2); } else if (len < 10 || isNaN(Number(pieces[0])) || isNaN(Number(pieces[1])) || isNaN(Number(pieces[2]))) { var selStart:Number = 0; var selEnd:Number = 10; // year if (isNaN(Number(pieces[2].charAt(0)))) { pieces[2] = 'yyyy'; selStart = 6; selEnd = 10; } else if (isNaN(Number(pieces[2].charAt(1)))) { pieces[2] = pieces[2].charAt(0) + 'yyy'; selStart = 7; selEnd = 10; } else if (isNaN(Number(pieces[2].charAt(2)))) { pieces[2] = pieces[2].charAt(0) + pieces[2].charAt(1) + 'yy'; selStart = 8; selEnd = 10; } else if (isNaN(Number(pieces[2].charAt(3)))) { pieces[2] = pieces[2].charAt(0) + pieces[2].charAt(1) + pieces[2].charAt(2) + 'y'; selStart = 9; selEnd = 10; } // day if (isNaN(Number(pieces[1].charAt(0)))) { pieces[1] = 'dd'; selStart = 3; selEnd = 5; } else if (isNaN(Number(pieces[1].charAt(1)))) { pieces[1] = pieces[1].charAt(0) + 'd'; selStart = 4; selEnd = 5; } // month if (isNaN(Number(pieces[0].charAt(0)))) { pieces[0] = 'mm'; selStart = 0; selEnd = 2; } else if (isNaN(Number(pieces[0].charAt(1)))) { pieces[0] = pieces[0].charAt(0) + 'm'; selStart = 1; selEnd = 2; } this.text = pieces[0] + '/' + pieces[1] + '/' + pieces[2]; Selection.setSelection(selStart, selEnd); } else { // calculate age var today:Date = new Date(); var from:Date = new Date(Number(pieces[2]), Number(pieces[0]) - 1, Number(pieces[1])); var vDate:Date = new Date(today.getFullYear(), 2, 0); var diff:Number = today - from; // had to divide by 1000 because flash counts miliseconds var age:Number = Math.floor((diff / 31556926) / 1000) + ((vDate.getDate()) == 29 ? 1 : 0); this._parent._parent.age_mc.input_txt.text = age; } }