function art_title_edit(url, id)
{
   var ot, nt;
   id = $_(id);
   if(!id) return false;
   ot = id.innerHTML;
   nt = prompt('Noul titlu:', ot);
   if(nt === null) return false;
   if(ot == nt) return true;

//    url = url + urlencode1(nt);
   url = url + escape(nt);
   return call_server(url, null, answer_srv);
}
// ----------------------------------------------------------------------------------------
function art_click_title(id, art_id)
{
  if(!art_id) art_id = (typeof id == 'object' && id.getAttribute ? id.getAttribute(id) : id).split('_').shift();  
  id = $_(id);
  if(typeof id != 'object') return false;
  if(!id.firstChild || id.firstChild.nodeType != Node.TEXT_NODE) return true;
  var txt, inp;
  txt = id.innerHTML;
  len = txt.length;
  if(len<100) len = 100;
  inp = document.createElement('INPUT');
  $(inp).attr('type'  , 'text')
        .attr('oldtxt', txt)
        .attr('size'  , len)
        .val(txt)
        .blur(function () {art_blure_title(this, art_id)})
        .keydown(editor_input_keydown)
        .keyup(editor_input_keyup);
//   inp.setAttribute('onblur' , 'art_blure_title(this, '+art_id+')');
  replaceObj(inp, id.firstChild);
  inp.select(); 
}

function art_blure_title(id, art_id)
{
  if(typeof id == 'string') id = id.substr(0,1) == '#' ? $(id) : $('#'+id); else id = jQuery(id);
  if(typeof id != 'object') return false;
  var txt = id.val(), oldtxt = id.attr('oldtxt');

  if(txt != oldtxt && confirm('Doresti sa salvezi titlul?\n'+txt))
     art_save(txt, art_id);
  else
     txt = oldtxt;   
  
  txt = document.createTextNode(txt);
  (id = id[0]);
  replaceObj(txt, id);
  removeObj(id);
  return true;
}

function art_ajax_encode(txt) {
   var r='', i,l=txt.length,c;
   for(i=0;i<l;i++)
   {
      c = txt.charCodeAt(i);
       if ( c < 0x80 ) {  // 7 bits  0x7f
          switch(c){
            case 43: r += '%2B'; break; 
            case 47: r += '%2F'; break;
            default: r += escape(String.fromCharCode(c));          
          }
       } else {
          c = c.toString(16);
          while(c.length<4) c = '0'+c;
          r += '%u' + c; 
       }     
   }
   return r;
}

function art_save(txt, id)
{
   if(!id) return false;
   var data = 'mod=art&art=set_title&art_id=' + art_ajax_encode(id) + '&art_title=' + art_ajax_encode(txt);
   function ans(r,s){ answer_srv(r,s); }
   return call_server(null, data, ans);
}

function art_save_cnt(txt, id, f) {
   if(!id) return false;
   var data = 'mod=art&art=save&art_id=' + art_ajax_encode(id) + '&art_cnt=' + art_ajax_encode(txt);
   function ans(r,s){ answer_srv(r,s); }
   return call_server(null, data, f||ans);
}

function art_edbl2html(o) {
   if(!o) o = this;
   
}

function art_e_src(e, alt){ return e&&(e['target']||e['srcElement'])||alt; }

function art_edbl_keydown(e) {
  var o=art_e_src(e, this);
  var keys=o.keys||(o.keys=[]);
  var k = e.keyCode;
  var l = keys.length; 
  if(l > 10) { keys.splice(0, l-10); l = 10; }  
  var last = keys[l-1];
  keys.push(k);
  var a=$(this).data('clicker');

  switch(last)  // ins:45 del:46 win:91 alt:18
  {
     case 91: /*CTRL*/ 
       switch(k) {
         case 67: /*C*/ if(a) a.data('cancel', true);
         case 83: /*S*/ if(a) a.click(); return false;
       }
       break;

     case 17: /*CTRL*/
       switch(k) {
         case 83: /*S*/ if(a) a.click(); return false;
       }
        
     case 18: /*ALT*/ 
       switch(k) {
         case 34: /*PgDn*/     ; return false;  
         case 35: /*END*/      ; return false;  
         case 45: /*INS*/      ; return false;  
         case 91: /*WIN*/      ; return false;  
         case 46: /*DEL*/      ; return false;  
         case 8: /*BACKSPACE*/ ; return false;
//          default: alert(k);  
       };
       break;
     default:
        switch(k) {case 27: /*ESC*/  if(a) {a.data('cancel', true); a.click();} return false;}
  }
}

function art_edbl_keyup(e) {
  var o=art_e_src(e, this);
  var keys=o.keys||(o.keys=[]);
  var k = e.keyCode, l, i = keys.length;
  while(i--) if(k == keys[i]) { keys.splice(i, 1); }
}

function art_mk_edbl(e)
{
  try {
    var a=$(this),
        id=e.data && e.data.id || a.attr('art'), 
        ic = id+'_cnt', o=$('#'+ic), t, c=e.data&&e.data.cancel;
    if(!o || !o.length) return false;
    t = !o[0].isContentEditable;
    o[0].contentEditable = t;
    if(t) {
      o.data('old_data', o.html());
      o.data('clicker', a);
      o.keydown(art_edbl_keydown).keyup(art_edbl_keyup);
//       o[0].focus();
//       var d = o.html();
//       o.html(d);
    } else {
      o.unbind('keydown',art_edbl_keydown).unbind('keyup',art_edbl_keyup);
      var d = o.html();
      if(o.data('old_data') != d) {
        if(!a.data('cancel') && confirm('Save article ' + id + '?')) {
          art_save_cnt(d, id);
        } else { o.html(o.data('old_data')) }
        a.data('cancel', false);
      }
      o.data('old_data', false);
    }
    a.html((!t)?'[Editable]':'<b>[<u>Save</u>]</b>');
  }catch(err){alert(err)}
}

function art_editor_init() {
  var doc=document, bd=doc.body;
  try {
    $('.art_container').each(function (n, o){
      var id = o.firstChild.id;
      var h = $('<a href="javascript:void(0)" art="'+(id.split('_').slice(1).join('_'))+'">[Editable]</a> &nbsp; ');
      h.click(art_mk_edbl);
      $('legend', o).after(h) 
    });
  } catch(err){alert(err)}
}

(function ($) {
try{
$(function() {
  var exec = user_can_edit || window['user_can_edit'] || top.window['user_can_edit'];
  if(!exec) return false;
  art_editor_init()
});
}catch(e){alert(e)}
})(jQuery);

