var Edit = {
   TT_EDITMENU : ' | <a href="javascript:Edit.#{m}(#{i});">#{m}</a>',
   TT_EDIT_DATE : '<input type="text" id="year" name="year" size="4" value="#{year}" /> / <input type="text" id="month" name="month" size="2" value="#{month}" /> / <input type="text" id="day" name="day" size="2" value="#{day}" /> - <input type="text" id="hour" name="hour" size="2" value="#{hour}" /> : <input type="text" id="min" name="min" size="2" value="#{min}" />',
   TT_EDIT_DATA : '<textarea id="data" name="data" rows="30">#{data}</textarea>',
   TT_DATE : '#{year}-#{month}-#{day}',

   id : undefined,

   init : function(id) {
      Edit.id = id;
      id ? Contextmenu.set({name:'edit',callback:Edit.edit},
                           {separator:true},
                           {name:'delete this page',callback:Edit.remove})
         : Contextmenu.set({name:'create',callback:Edit._create});
   },
   create : function() {
      Contextmenu.set({name:'commit',callback:Edit.commit});
      var date = new Date();
      $('date').innerHTML = new Template(Edit.TT_EDIT_DATE).evaluate({
         year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate(),hour:date.getHours(),min:date.getMinutes()
      });
   },
   _create : function() {
      location.href='/diary/create';
   },
   commit : function() {
      Contextmenu.set();
      var date = new Date();
      date.setFullYear($F('year'));
      date.setMonth($F('month')-1);
      date.setDate($F('day'));
      date.setHours($F('hour'));
      date.setMinutes($F('min'));
      var ctime = Math.round(date.getTime()/1000);

      new AjaxRequest('/diary/edit/create', function(dat) {
         if(dat.err) {
            alert(dat.errstr);
            Contextmenu.set({name:'commit',callback:Edit.commit},
                            {name:'cancel',callback:Edit.cancel},
                            {separator:true},
                            {name:'delete this page',callback:Edit.remove});
         } else {
            location.href = '/diary/ping';
         }
      }).send({data:$F('data').gsub(/\r\n/,'\n'),ctime:ctime});
   },
   edit : function() {
      Contextmenu.set();
      new AjaxRequest('/diary/edit/retrieve',function(dat) {
         var date = new Date();
         date.setTime(dat.ctime*1000);
         $('date').innerHTML = new Template(Edit.TT_EDIT_DATE).evaluate({
            year:date.getFullYear(),month:date.getMonth()+1,day:date.getDate(),hour:date.getHours(),min:date.getMinutes()
         });
         $('log-'+Edit.id).innerHTML = new Template(Edit.TT_EDIT_DATA).evaluate(dat);
         Contextmenu.set({name:'update',callback:Edit.update},
                         {name:'cancel',callback:Edit.cancel},
                         {separator:true},
                         {name:'delete this page',callback:Edit.remove});
      }).send({id:Edit.id});
   },
   update : function() {
      Contextmenu.set();
      var date = new Date();
      date.setFullYear($F('year'));
      date.setMonth($F('month')-1);
      date.setDate($F('day'));
      date.setHours($F('hour'));
      date.setMinutes($F('min'));
      var ctime = Math.round(date.getTime()/1000);

      new AjaxRequest('/diary/edit/update', function(dat) {
         if(dat.err) {
            alert(dat.errstr);
            Contextmenu.set({name:'update',callback:Edit.update},
                            {name:'cancel',callback:Edit.cancel},
                            {separator:true},
                            {name:'delete this page',callback:Edit.remove});
         } else {
            var date_new = new Date();
            date_new.setTime(dat.ctime*1000);
            $('date').innerHTML = new Template(Edit.TT_DATE).evaluate({
               year:date_new.getFullYear(),month:date_new.getMonth()+1,day:date_new.getDate()});
            $('log-'+Edit.id).innerHTML = Content.filter(dat.data);
            Contextmenu.set({name:'edit',callback:Edit.edit},
                            {separator:true},
                            {name:'delete this page',callback:Edit.remove});

         }
      }).send({id:Edit.id,data:$F('data').gsub(/\r\n/,'\n'),ctime:ctime});
   },
   cancel : function() {
      new AjaxRequest('/diary/data', function(dat) {
         var ret = dat.data[0];
         $('log-'+ret.id).innerHTML = Content.filter(ret.data);
      }).send({id:Edit.id});
      Contextmenu.set({name:'edit',callback:Edit.edit},
                      {separator:true},
                      {name:'delete this page',callback:Edit.remove});
   },
   remove : function() {
      if(!window.confirm('do you remove this page?')) return;
      new AjaxRequest('/diary/edit/remove',function(dat) {
         if(dat.err) {
            alert(dat.errstr);
         } else {
            location.href = '/diary';
         }
      }).send({id:Edit.id});
   }
};
