  var editors = ['#article-text'];
  var editorOptions = [
    { options: {
        showPath: false,//true,
        refreshToolbar: false,//true,
        cntToolbar: '#cmd-text',
        cntPath: '#path-text',
        show: 'slideDown',
        hide: 'slideUp'
      },
      toolbars: [
        [
          ['bold', 'italic', 'underline', 'strikethrough'],
          ['olist', 'ulist', 'indent', 'outdent', 'superscript', 'subscript']
        ],
        [
          ['undo', 'redo', 'removeformat']
        ]
      ]
/*      toolbars: [
        [
          ['bold', 'italic', 'underline', 'strikethrough'],
          ['olist', 'ulist', 'indent', 'outdent', 'superscript', 'subscript']
        ],
        [
          ['justifyleft', 'justifyright', 'justifycenter', 'justifyfull']
        ],
        [
          ['undo', 'redo', 'removeformat']
        ]
      ]*/
    }
  ];

  var editor; // editor
  var options; // editor options
  var toolbars; // editor toolbars
  var currentArticle;
  var cCatAttributes;

function initEdit() {
	// Tabs
	$('#tabs').tabs({
		selected: 0,
    spinner: 'Dohvat podataka...'
  });

	//var $loading = $('<div class="cntLoading"><img src="loading.gif" alt="loading" /></div>');

	$('#article-start, #article-end').datepicker({
    changeMonth: true,
		changeYear: true
  });

  function writeCategriesLevel(iLevel, cont, list) {
    var i, s = '';
    for(i = 0; i < iLevel; i++) {
      s = s + ':';
    }
    for(i = 0; i < list.length; i++) {
      cont.append($('<option></option>').attr('value', list[i].id).text(s + list[i].caption));//.css('padding-left', 10 * iLevel + 'px'));
      if(list[i].list) {
        writeCategriesLevel(iLevel + 1, cont, list[i].list);
      }
    }
  }

  function writeCategories(json) {
    var cont = $('#article-category');
    cont.empty();
    writeCategriesLevel(0, cont, json.list);
    cont.children(':first').attr('selected', 'selected');
  }

  function fillCategories() {
    //var lang = $('#topMenu .language.selected')[0].id.substr(3);
    $.ajax({
      url: 'category.php',
      async: true,
      dataType: 'json',
      data: {
        id: 0, // all
        method: 'revlist',
        level: 4
      },
      success: writeCategories
    });
  }

  fillCategories();
/*				
	var $dialog = $('<div></div>')
    .append($loading.clone()).dialog(dlgOptions).dialog('open');
*/
//        $dialog.dialog(dlgOptions).dialog('open');
	//$('#tabs').dialog('open');

  function switchEditor(id) {
    if(editor === editors[id]) {
      return;
    }
    if(options) {
      deactivateEditor();
    }
    editor = editors[id];
    d = $(editor);
    options = editorOptions[id].options;
    toolbars = editorOptions[id].toolbars;
    activateEditor();
    changed();
  }

  $(editors[0]).focus(function() {
    switchEditor(0);
  });

  $(editors[0]).blur(function() {
  });

  function emptyEditor() {
    currentArticle = -1;
    cArticle = null;
    $('#article-supertitle').val('');
    $('#article-title').val('');
    $('#article-subtitle').val('');
    $('#article-intro').val('');
    $('#article-text').html('');
    //$('#article-category').val('');
    $('#article-tags').val('');
    $('#article-active')[0].checked = false;
    $('#article-selected')[0].checked = false;
    $('#article-commenting')[0].checked = false;
    $('#article-rating')[0].checked = false;
    $('#article-start').val('');
    $('#article-end').val('');
    var i;
    for(i = 0; i < 5; i++) {
      $('#article-att' + i).val();
    }
  }
  
  function showEditor(idTab) {
    $dialog = $('#tabs').dialog('open');
  }
  
  $('#portletViewer .header .toolbar .icon-edit').live('click', function() { // add new article
    var catID = $('#portletViewer .header .category.selected')[0].id.substr(4);
    $('#article-category').val(catID);
    refreshCatAttributes();
    emptyEditor();
    showEditor(0);
  });
  
  $('.fullarticle .icon-edit').live('click', function() { // edit current article
    currentArticle = parseInt($(this).parents('.fullarticle')[0].id.substr(4), 10);
    loadEditor(currentArticle);
    showEditor(0);
  });

  $('#topBanner .headerarticle .icon-edit').live('click', function() { // edit header banner article
    currentArticle = parseInt($(this).parents('.headerarticle')[0].id.substr(4), 10);
    loadEditor(currentArticle);
    showEditor(0);
  });

  function getAttribute(article) {
    article.attribute = [];
    $('#tabs-attributes div').each(function() {
      var $this = $(this);
      var attName = $this.find('label').text();
      var attID = $this.find('input').attr('id').substr(11);
      var attValue = $this.find('input').val();
      article.attribute.push({attributename: attName, attid: attID, value: attValue});
    });
    return article;
  }

  function getTags(article) {
    var i, tag = $('#article-tags').val().split(','), tagvalue;
    article.tag = [];
    for(i = 0; i < tag.length; i++) {
      tagvalue = $.trim(tag[i]);
      if(tagvalue.length) {
        article.tag.push({tagvalue: tagvalue});
      }
    }
    if(!article.tag.length) {
      article.tag = undefined;
    }
    return article;
  }
  
  function getArticle(data) {
    data.supertitle = $('#article-supertitle').val();
    data.title = $('#article-title').val();
    data.subtitle = $('#article-subtitle').val();
    data.intro = $('#article-intro').val();
    data.body = $('#article-text').html();
    data.category = $('#article-category').val();
    data.active = $('#article-active')[0].checked ? 1 : 0;
    data.selected = $('#article-selected')[0].checked ? 1 : 0;
    data.commenting = $('#article-commenting')[0].checked ? 1 : 0;
    data.rating = $('#article-rating')[0].checked ? 1 : 0;
    data.publishfrom = $('#article-start').val();
    data.publishto = $('#article-end').val();
    data = getTags(data);
    data = getMMItems(data);
    data = getAttribute(data);
    data = getLinks(data);
    return data;
  }
  
  function saveArticle(bPreview) {
    var dataArticle = {
      id: currentArticle,
      visible: bPreview ? 'public' : 'public',
      method: 'save',
      view: 'editor'
    };
    dataArticle = getArticle(dataArticle);
    $.ajax({
      type: 'POST',
      //processData: false,
      //contentType: "application/x-www-form-urlencoded; charset=utf-8",
      url: 'article.php',
      async: false,
      dataType: 'json',
      //data: $.param(dataArticle, true),
      data: dataArticle,
      success: fetchArticle
    });
  }
  
  function saveAsNewArticle(bPreview) {
    var dataArticle = {
      visible: bPreview ? 'public' : 'public',
      method: 'create',
      view: 'editor'
    };
    dataArticle = getArticle(dataArticle);
    $.ajax({
      type: 'POST',
      url: 'article.php',
      async: false,
      dataType: 'json',
      data: dataArticle,
      success: fetchArticle
    });
  }
  
  function deleteArticle() {
    var bResult = false;
    $.ajax({
      url: 'article.php',
      async: false,
      dataType: 'json',
      data: {
        id: currentArticle,
        method: 'delete'
      },
      success: function(json) {
        bResult = !json.error;
        if(json.error) {
          fetchArticle(json);
        }
        else {
          $('#art-' + json.deleted).remove();
        }
      }
    });
    return bResult;
  }
  
  function previewArticle() {
    saveArticle(true);
  }
  
  function publishArticle() {
    saveArticle(false);
  }

  function writeTags(a) {
    var i, tags = [];
    for(i = 0; i < a.tag.length; i++) {
      tags.push(a.tag[i].tagvalue);
    }
    $('#article-tags').val(tags.join(', '));
  }
  
  function displayAttributes(attribute) {
    var contAttList = $('#tabs-attributes').empty();
    var i, item, contItem;
    for(i = 0; i < attribute.length; i++) {
      contItem = $('<div></div>');
      item = $('<label></label>').text(attribute[i].attributename + ':').attr('for', 'article-att' + attribute[i].attid);
      contAttList.append(contItem.append(item));
      item = $('<input />').val(attribute[i].value).attr('id', 'article-att' + attribute[i].attid).attr('size', 20);
      contAttList.append(contItem.append(item));
    }
  }

  function writeAttributeList(a) {
    displayAttributes(a.attribute);
  }

  function getLinks(article) {
    article.link = [];
    $('#sortableLinks .linkItem').each(function() {
      var $this = $(this);
      var lCaption = $this.find('.linkCaption').val();
      var lAddress = $this.find('.linkAddress').val();
      var lDescription = $this.find('.linkDesc').val();
      article.link.push({caption: lCaption, address: lAddress, description: lDescription});
    });
    return article;
  }

  function writeLinks(a) {
    var contList = $('#sortableLinks');
    contList.empty();
    var i;
    for(i = 0; i < a.link.length; i++) {
      addLink(a.link[i]);
    }
  }
  
  function fetchArticle(json) {
    if(json.deleted) {
      return;
    }
    if(json.error) {
      var e = json.error;
      dlgAlert(e.message);
      return;
    }
    var a = json.article;
    currentArticle = a.id;
    $('#article-supertitle').val(a.supertitle);
    $('#article-title').val(a.title);
    $('#article-subtitle').val(a.subtitle);
    $('#article-intro').val(a.intro);
    $('#article-text').html(a.body);
    $('#article-category').val(a.category);
    $('#article-tags').val(a.tags);
    $('#article-active')[0].checked = (a.active === '1');
    $('#article-selected')[0].checked = (a.selected === '1');
    $('#article-commenting')[0].checked = (a.commenting === '1');
    $('#article-rating')[0].checked = (a.rating === '1');
    $('#article-start').val(a.publishfrom);
    $('#article-end').val(a.publishto);
    writeTags(a);
    writeMultimediaArticle(a);
    writeAttributeList(a);
    writeLinks(a);
  }
  
  function loadEditor(id) {
    $.ajax({
      url: 'article.php',
      //async: false,
      dataType: 'json',
      data: {
        id: id,
        method: 'read',
        view: 'editor'
      },
      success: fetchArticle
    });
  }

  function showArticle(json) {
    var a = json.article;
    var el = $('#art-' + a.id);
    if(el.length) { // article in portletViewer
      writeArticle(a, el);
    }
    else if($('#hat-' + a.id).length) { // article in header
      writeHeader(a);
    }
  }

  function refreshArticle(id) {
    $.ajax({
      url: 'article.php',
      //async: false,
      dataType: 'json',
      data: {
        id: id,
        method: 'read',
        view: 'full'
      },
      success: function(json) {
        var catID = parseInt($('#portletViewer .header .category.selected')[0].id.substr(4), 10);
        var articleCatID = parseInt(json.article.category, 10);
        if(catID !== articleCatID) {
          $('#art-' + json.article.id).remove();
        }
        else {
          showArticle(json);
        }
        getMiniPortlets();
        getTagCloud();
      }
    });
  }

  function mapCatAttFields(att) {
    var item = {
      attid: att.attribute,
      attributename: att.attributename,
      attributetype: att.attributetype,
      data: att.data,
      value: att.defaultvalue
    };
    return item;
  }

  function alignAttributes() {
    var i, bFound, attData = [];
    if(currentArticle > 0) {
      var l, aAtts = cArticle.attribute;
      for(l = 0; l < cCatAttributes.length; l++) {
        bFound = -1;
        for(i = 0; i < aAtts.length; i++) {
          if(aAtts[i].attid === cCatAttributes[l].attribute) {
            bFound = i;
            break;
          }
        }
        if(bFound === -1) {
          attData.push(mapCatAttFields(cCatAttributes[l]));
        }
        else {
          attData.push(aAtts[i]);
        }
      }
    }
    else {
      for(i = 0; i < cCatAttributes.length; i++) {
        attData.push(mapCatAttFields(cCatAttributes[i]));
      }
    }
    displayAttributes(attData);
  }

  function refreshCatAttributes(catID, onLoad) {
    $.ajax({
      url: 'category.php',
      dataType: 'json',
      data: {
        id: catID,
        method: 'attributes'
      },
      success: onLoad
    });
  }

  function onLoadAttributes(json) {
    cCatAttributes = json.list;
    alignAttributes();
  }
  
  $('#article-category').change(function() {
    var catID = $('#article-category').val();
    refreshCatAttributes(catID, onLoadAttributes);
  });

  $("#sortableLinks").sortable({
    distance: 20,
    revert: true,
    cancel: ".linkCaption, .linkAddress, .linkDesc",
    update: function(event, ui) {
      //alert('refresh ordernum');
    }
  });

  function addLink(lItem) {
    var item = $('#templateLink li:first').clone();
    var id = $('#sortableLinks .linkItem').length;
    item.attr('id', 'lItem' + id);
    updateLink(item, lItem);
    $("#sortableLinks").append(item);
  }

  function updateLink(item, lItem) {
    item.find('.linkCaption').val(lItem.caption);
    item.find('.linkAddress').val(lItem.address);
    item.find('.linkDesc').val(lItem.description);
  }

  $('#addLink').click(function() {
    var lItem = {
      caption: '',
      address: '',
      description: ''
    };
    addLink(lItem);
  });

  $('#tabs-links .dragHandle .ui-icon-refresh').live('click', function() {
    var item = $(this).parents('li');
    var id = parseInt(item.attr('id').substr(5), 10);
    if(id < cArticle.link.length) {
      updateLink(item, cArticle.link[id]);
    }
  });

  function initEditors() {
    var i;
    for(i = 0; i < editors.length; i++) {
      editor = editors[i];
      d = $(editor);
      options = editorOptions[i].options;
      toolbars = editorOptions[i].toolbars;
      d.attr('contentEditable', 'true');
      initEditor();
      //if((i + 1) < editors.length)
        //deactivateEditor();
    }
  }

  var dlgOptions = {
		autoOpen: false,
		width: 420,
		height: 550,
		show: 'fade',
		hide: 'fade',
		title: 'Unos članka',
		buttons: {
			"Preview": function() { 
        if(currentArticle === -1) {
          saveAsNewArticle(true);
          getArticles(currentArticle);
          getMiniPortlets();
          getTagCloud();
        }
        else {
          previewArticle();
          refreshArticle(currentArticle);
        }
			}, 
			"Objavi": function() {
        if(currentArticle === -1) {
          saveAsNewArticle(true);
          getArticles(currentArticle);
        }
        else {
          publishArticle(); 
          refreshArticle(currentArticle);
        }
				$(this).dialog("close"); 
			}, 
			"Snimi kao novi": function() { 
				saveAsNewArticle(true);
        getArticles(currentArticle);
        loadEditor(currentArticle);
			}, 
			"Obriši": function() {
        if(currentArticle === -1) {
          dlgAlert('Ne možete obrisati članak koji još nije snimljen');
          return;
        }
        if(deleteArticle()) {
          getMiniPortlets();
          getTagCloud();
          $(this).dialog("close");
        }
			}, 
			"Zatvori": function() { 
				$(this).dialog("close"); 
			} 
		}
	};

  $dialog = $('#tabs').dialog(dlgOptions);//.dialog('open');

  initEditors();

}

