Ext.onReady(function(){
   
Ext.QuickTips.init();
       
       
var win = window.nativeWindow;
       
       
var opener = Ext.air.NativeWindow.getRootHtmlWindow();
       
var taskId = String(window.location).split('=')[1];
       
var isNew = !taskId;
       
var completed = false;
       
        win
.title = 'Task - ' + Ext.util.Format.ellipsis(getTask().data.title, 40);
       
       
var tb = new Ext.Toolbar({
                region
: 'north',
                height
:26,
                id
:'main-tb',
                items
:[{
                        id
:'cpl-btn',
                        iconCls
: 'icon-mark-complete',
                        text
: 'Mark Complete',
                        handler
: function(){
                                setCompleted
(!completed);
                               
if(completed) {
                                        setMsg
('This task was completed on ' + new Date().format('l, F d, Y'));
                               
}
                               
if(validate()) {
                                       
(function(){
                                                saveData
();
                                               
if (completed) {
                                                        win
.close();
                                               
}
                                       
}).defer(250);
                               
}
                       
}
               
},'-',
                       
{iconCls: 'icon-delete-task', text: 'Delete', handler: function(){
                               
Ext.Msg.confirm('Confirm Delete', 'Are you sure you want to delete this task?', function(btn){
                                       
if(btn == 'yes'){
                                                opener
.tx.data.tasks.remove(getTask());
                                                win
.close();
                                       
}
                               
});
                       
}}
               
]
       
});
       
       
var title = new Ext.form.TextField({
                fieldLabel
: 'Task Subject',
        name
: 'title',
        anchor
: '100%'
   
});
               
       
var dueDate = new Ext.form.DateField({
                fieldLabel
: 'Due Date',
                name
: 'dueDate',
                width
: 135,
                format
: 'm/d/Y'
       
});
       
       
var list = new ListSelector({
        fieldLabel
: 'Task List',
                name
: 'listId',
                store
: opener.tx.data.lists,
                anchor
: '100%'
   
});
       
        list
.on('render', function(){
               
this.menu.on('beforeshow', function(m){
                        list
.tree.setWidth(Math.max(180, list.getSize().width));
               
});
       
});
        win
.addEventListener('closing', function(){
                opener
.tx.data.lists.unbindTree(list.tree);
       
});
       
       
       
var hasReminder = new Ext.form.Checkbox({
                boxLabel
: 'Reminder:',
                checked
: false
       
});
       
       
var reminder = new Ext.ux.form.DateTime({
                name
: 'reminder',
                disabled
: true,
                timeFormat
: 'g:i A',
                dateFormat
: 'm/d/Y',
                timeConfig
: {
                        tpl
: opener.Templates.timeField,
                        listClass
:'x-combo-list-small',
                        maxHeight
:100
               
}
       
});
       
       
var description = new Ext.form.HtmlEditor({
        hideLabel
: true,
        name
: 'description',
        anchor
: '100% -95',  // anchor width by percentage and height by raw adjustment
        onEditorEvent
: function(e){
               
var t;
               
if(e.browserEvent.type == 'mousedown' && (t = e.getTarget('a', 3))){
                    t
.target = '_blank';
               
}
               
this.updateToolbar();
           
}
   
});
       
       
var form = new Ext.form.FormPanel({
                region
:'center',
        baseCls
: 'x-plain',
        labelWidth
: 75,
        margins
:'10 10 5 10',
               
                buttonAlign
: 'right',
                minButtonWidth
: 80,
                buttons
:[{
                        text
: 'OK',
                        handler
: function(){
                               
if(validate()) {
                                        saveData
();
                                        window
.nativeWindow.close();
                               
}
                       
}
               
},{
                        text
: 'Cancel',
                        handler
: function(){ window.nativeWindow.close(); }
               
}],
                               
               
        items
: [{
                        xtype
:'box',
                        autoEl
: {id:'msg'}
               
},
                title
,{
                        layout
: 'column',
                        anchor
: '100%',
                        baseCls
: 'x-plain',
                        items
: [{
                                width
: 250,
                                layout
: 'form',
                                baseCls
: 'x-plain',
                                items
: dueDate
                       
}, {
                                columnWidth
: 1,
                                layout
: 'form',
                                baseCls
: 'x-plain',
                                labelWidth
:55,
                                items
: list
                       
}]
               
},{
                        xtype
:'box',
                        autoEl
: {cls:'divider'}
               
},{
                        layout
: 'column',
                        anchor
: '100%',
                        baseCls
: 'x-plain',
                        items
: [{
                                width
: 80,
                                layout
: 'form',
                                baseCls
: 'x-plain',
                                hideLabels
: true,
                                items
: hasReminder
                       
}, {
                                columnWidth
: 1,
                                layout
: 'form',
                                baseCls
: 'x-plain',
                                hideLabels
: true,
                                items
: reminder
                       
}]
               
},
                description
]
   
});
       
       
var viewport = new Ext.Viewport({
                layout
:'border',
                items
:[tb, form]
       
});
       
       
var msg = Ext.get('msg');
       
var task = getTask();
       
       
if(task && task.data.completedDate){
                setMsg
('This task was completed on ' + task.data.completedDate.format('l, F d, Y'));
       
}      
       
        hasReminder
.on('check', function(cb, checked){
                reminder
.setDisabled(!checked);
               
if(checked && !reminder.getValue()){
                        reminder
.setValue(opener.tx.data.getDefaultReminder(getTask()));
               
}
       
});
       
        refreshData
.defer(10);

        win
.visible = true;
        win
.activate();
       
        title
.focus();
               
       
function refreshData(){
               
if(!isNew){
                       
var task = getTask();
                        hasReminder
.setValue(!!task.data.reminder);
                        form
.getForm().loadRecord(task);
                        setCompleted
(task.data.completed);
               
}
       
}
       
       
function saveData(){
               
var task;
               
if(isNew){
                        task
= opener.tx.data.tasks.createTask(
                                title
.getValue(),
                                list
.getRawValue(),
                                dueDate
.getValue(),
                                description
.getValue(),
                                completed
                       
);
               
}else{
                        task
= getTask();
                        task
.set('completed', completed);
               
}
               
if(!hasReminder.getValue()){
                        reminder
.setValue('');
               
}
                form
.getForm().updateRecord(task);
       
}
       
       
function setCompleted(value){
                completed
= value;
               
var cplBtn = Ext.getCmp('cpl-btn');
               
if (completed) {
                        cplBtn
.setText('Mark Active');
                        cplBtn
.setIconClass('icon-mark-active');
                        hasReminder
.disable();
                        reminder
.disable();
               
}
               
else {
                        cplBtn
.setText('Mark Complete');
                        cplBtn
.setIconClass('icon-mark-complete');
                        setMsg
(null);
                        hasReminder
.enable();
                        reminder
.setDisabled(!hasReminder.checked);
               
}
       
}
       
       
function setMsg(msgText){
               
var last;
               
if(!msgText) {
                        msg
.setDisplayed(false);
               
} else {
                        msg
.setDisplayed('');
                        msg
.update(msgText);
               
}
                description
.anchorSpec.bottom = function(v){
           
if(v !== last){
                last
= v;
                               
var h = msg.getHeight();
               
return v - 95 - (h ? h + 8 : 0);
           
}
       
};
                form
.doLayout();
       
}
       
       
function validate(){
               
if(Ext.isEmpty(title.getValue(), false)){
                       
Ext.Msg.alert('Warning', 'Unable to save changes. A subject is required.', function(){
                                title
.focus();
                       
});
                       
return false;
               
}
               
return true;
       
}
       
       
function getTask(){
               
var t = opener.tx.data.tasks.lookup(taskId);
               
if(t){
                       
//workaround WebKit cross-frame date issue
                        fixDateMember
(t.data, 'completedDate');
                        fixDateMember
(t.data, 'reminder');
                        fixDateMember
(t.data, 'dueDate');
               
}
               
return t;
       
}
       
});