/*
Copyright (c) 2012, Bartłomiej Nitoń
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

var main_field = ax_main_field,

initialColModel = ax_initialColModel;
initialColNames = ax_initialColNames;

var sort_order = ax_sort_order;
var nkjp_opinion_tab = ax_nkjp_opinion_vals;
var nkjp_source_tab = ax_nkjp_source_vals;

// te wartosci maja zasieg na wszystkie hasla
 window.schemas = new Array();
 var lemma_id = -1;
 var prev_lemma_id = -1;

// te wartosci trzeba czyscic przy ladowaniu innego hasla
 var selected_id = -1;
 var prev_selected_id = -1;
 var edited_id = -1;
 var elem_in_bucket = '';
 var manipulated_id = -1;
 var new_elem_id = -2;
 var frames_modif = new Array();
 var frames_modif_idx = 0;
 var copy_elem_id = -1;
 var activeNewFramePanel = 'frames_modif';
 var selectedArgumentsIdNkjp = new Array();
 var selectedFrameIdNkjp = -1;
 var nkjp_examples = new Array();
 var curr_example_id = -1;
 var selected_example_id = -1;
 var nkjp_lemma_examples = new Array();
 var curr_lemma_example_id = -1;
 var selected_lemma_example_id = -1;
 var addedFrame = '';
 var emptyFrame = new frame(-1, '', ['_', '_'], new Array(), '');
 var emptyPosition = new position(-1, '', new Array(), new Array());
 var lemma_entry = '';
 var prev_lemma_entry = '';
 var selected_notes_row_id = -1;
 //var can_modify = false;
 
////////////////////////////////////////////////////////////////
 
function alertUserNotAuthenticated() {
	error_alert('Przed wykonaniem działania odśwież okno przeglądarki, a następnie zaloguj się ponownie do narzędzia.');
}

function resetLemmaVersions() {
	window.frames_modif = new Array();
	window.frames_modif_idx = 0;
	var lemma_version = new Lemma_Version(window.schemas, 
			  							   window.nkjp_examples, 
			  							   window.nkjp_lemma_examples); 
	frames_modif.push(lemma_version);
}

function argsToRemove(example, elementToRemoveId)
{
	argumentsToRemove = []
	for(var i=0; i<example.arguments_ids.length; i++)
	{
		if(example.arguments_ids[i].startsWith(elementToRemoveId))
			argumentsToRemove.push(example.arguments_ids[i]);
	}
	return argumentsToRemove
}

function moveExampleToLemmaEx(example)
{
	window.nkjp_examples.splice($.inArray(example, window.nkjp_examples), 1);
    example.frame_id = '';
    example.arguments_ids = '';
    example.example_id = curr_lemma_example_id;
    window.nkjp_lemma_examples.push(example);
    window.curr_lemma_example_id--;	
}

function addPinnedExamplesDialog() {
    $('#pinned-examples-dialog').dialog({ 
    	title: 'Dowiązane przykłady',
    	autoOpen: false, 
	    modal: true,
	    width: 'auto', 
	    height: 'auto',
	    closeOnEscape: false,
	    open: function(event, ui) { 
	    	$('.ui-dialog-titlebar-close', this.parentNode).hide(); 
	    	if(!parseId(window.selected_id)['pos_id'])
	    		$('.ui-button:contains(Zostaw)').hide();
	    	else
	    		$('.ui-button:contains(Zostaw)').show();
	    	if(user_has_perm('dictionary.add_syntactic_frames'))
	    		$('.ui-button:contains(Odepnij)').show();
	    	else
	    		$('.ui-button:contains(Odepnij)').hide();
	    },
	    buttons: {
	    	Odepnij: function()
	    	{
	    		$(this).dialog('close');
	    		assignedExamples = $(this).data('assignedExamples');
	    		for(var i=0; i<assignedExamples.length; i++)
	    		{
	    			example = assignedExamples[i];
	    			moveExampleToLemmaEx(example);
	    		}
	    		window.schemas = removeFrameElement(window.selected_id, window.schemas);
	    	    draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_');
	    	    $("tr.NkjpLemmaTableRow").click(function(){
	    	      selectLemmaNkjpTr(this.id)});
	    		new_frames_make_change();
	    	},
	    	Zostaw: function()
	    	{
	    		$(this).dialog('close');
	    		assignedExamples = $(this).data('assignedExamples');
	    		addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames');
	    		
	    		for(var i=0; i<assignedExamples.length; i++)
	    		{
	    			example = assignedExamples[i];
	    			argumentsToRemove = argsToRemove(example, window.selected_id); 
	    			if(argumentsToRemove.length == example.arguments_ids.length)
	    			{
	    				if(addSyntacticFramesPerm) {
	    					moveExampleToLemmaEx(example);
	    				}
	    				else {
	    					window.nkjp_examples.splice($.inArray(example, window.nkjp_examples), 1);
	    				}
	    			}
	    			else
	    			{
	    				newArgumentsIds = $.grep(example.arguments_ids, function(n, i){
	    					                       return $.inArray(n, argumentsToRemove) == -1;
	    					              });
	    				window.nkjp_examples[$.inArray(example, window.nkjp_examples)].arguments_ids = newArgumentsIds;
	    			}
	    		}
	    		window.schemas = removeFrameElement(window.selected_id, window.schemas);
	    	    draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_');
	    	    $("tr.NkjpLemmaTableRow").click(function(){
	    	      selectLemmaNkjpTr(this.id)});
	    		new_frames_make_change();
	    	},
	    	Anuluj: function()
	    	{
	    		$(this).dialog('close');
	    	}
	    }
    });
}

///////////////////////////////////////////////////////////////

function load_content(id) {
  $('#add-table-elem-dialog').dialog('close');
  if(lemma_id != id)
    $('#ready-note-dialog').dialog('close');
  initiateFrameFilters();
  
  if(window.activeLemmaPanel == 'preview_lemma')
  {   
	ShowProgressAnimation();
    $('#preview_lemma').load(ajax_lemma_preview, 'id='+id+'&main_lemma_id='+window.lemma_id, function(){
       window.prev_lemma_id=id;
       loadPrevSchemataAndExamples(true);
       createSplitter('prevFramesSplit', 'prev-lemma-tables', 'prev_tabs');
       areNewPreviewEntriesRelated();
    });
  }
  else
  {
	ShowProgressAnimation();
    // czyszczenie wartosci
	window.elem_in_bucket = '';
    window.selected_notes_row_id = -1;
    window.selected_id = -1;
    window.prev_selected_id = -1;
    window.edited_id = -1;
    window.manipulated_id = -1;
    window.new_elem_id = -2;
    window.copy_elem_id = -1;
    window.activeNewFramePanel = 'frames_modif';
    window.selectedArgumentsIdNkjp = new Array();
    window.selectedFrameIdNkjp = -1;
    window.nkjp_examples = new Array();
    window.curr_example_id = -1;
    window.selected_example_id = -1;
    window.lemma_nkjp_examples = new Array();
    window.curr_lemma_example_id = -1;
    window.selected_lemma_example_id = -1;
    window.addedFrame = '';
  
    $('#new_frames').empty();
    $('#preview_lemma').empty();
    $('#status').empty();
    window.change = false;
    window.notesNotSaved = false;
    window.lemmaExNotSaved = false;
      
    $('#new_frames').load(ajax_new_frames, 'id='+id, function(data){
        window.lemma_id = id;
        
        loadSchemataAndExamples();
        
        createSplitter('framesSplit','new-frame-tables', 'tabs');
        /*if(window.can_modify)
        {
          addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames');
          addPhraseologicFramesPerm = user_has_perm('dictionary.add_phraseologic_frames');
          
          if(addSyntacticFramesPerm || addPhraseologicFramesPerm) {
              $(document).unbind('keydown');
              $(document).bind('keydown', 'shift+s', saveHandle);
              $(document).bind('keydown', 'shift+z', function(evt){backOneModification(); return false; });
              $(document).bind('keydown', 'shift+y', function(evt){forwardOneModification(); return false; });
              $(document).bind('keydown', 'shift+a', function(evt){addElement(); return false; });
              $(document).bind('keydown', 'shift+r', function(evt){removeElement(); return false; });
              $(document).bind('keydown', 'shift+d', function(evt){duplicateElement(); return false; });
              $(document).bind('keydown', 'shift+c', function(evt){copyElement(); return false; });
              $(document).bind('keydown', 'shift+v', function(evt){pasteElement(); return false; });
              $(document).bind('keydown', 'shift+w', function(evt){validateSchemata(); return false; }); 
              if(addSyntacticFramesPerm) {
            	  $(document).bind('keydown', 'shift+x', function(evt){cutElement(); return false; });
                  $(document).bind('keydown', 'shift+m', function(evt){reserveLemma(); return false; });
              }
              if(addPhraseologicFramesPerm) {
            	  $(document).bind('keydown', 'shift+l', function(evt){addPhraseologicFrame(); return false; });
            	  $(document).bind('keydown', 'shift+b', function(evt){openAssignPhraseologicFrameDialog(); return false; });
              }
          }
        }
        else
        {
          $(document).unbind('keydown');
          $.get(ajax_user_has_perm, {perm: 'dictionary.own_lemmas'}, function(result) {
              if(result['has_perm']) {
            	  $(document).bind('keydown', 'shift+m', function(evt){reserveLemma(); return false; });
              }
          });
        }*/

  		if(document.getElementById("lemma_example_show"))
  		{
  		  draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_')
          $("tr.NkjpLemmaTableRow").click(function(){
            selectLemmaNkjpTr(this.id)});
        }  
  		addPinnedExamplesDialog();
  	    $('#lemma_desc').load(ajax_get_lemma_desc, 'id='+id);
  	    areNewPreviewEntriesRelated();
  		refresh_example_propositions();
      });
      $('#change_ctrl').load(ajax_change_ctrl, 'id='+id);
      $('#semantics').load(ajax_semantics, 'id='+id);
      $('#status').load(ajax_lemma_status, 'id='+id, function(){
    	  $("#lemma-status-change button").click(validate_and_change_status);
    	  $('#ready-note-dialog').dialog({ autoOpen: false, 
    		                               modal: true,
    		                               width: 'auto', 
    		                               height: 'auto',
    		                               closeOnEscape: true,
    		                               open: function(event, ui) { $('#ready-note-dialog #id_message_text').focus(); }
    	  });  
      });
      $('#notes').load(ajax_lemma_notes, 'id='+id);
      
      if(window.prev_lemma_id == -1)
        prevId = id;
      else 
        prevId = window.prev_lemma_id;
      
      $('#preview_lemma').load(ajax_lemma_preview, 'id='+prevId+'&main_lemma_id='+id, function(){
        window.prev_lemma_id=prevId;
        loadPrevSchemataAndExamples(false);
        createSplitter('prevFramesSplit', 'prev-lemma-tables', 'prev_tabs');
        areNewPreviewEntriesRelated();
      });  
  }
}

function validateSchemata() {
    if(window.change) {
        error_alert('Przed walidacją/zmianą statusu hasło musi zostać zapisane.');
        return false;
    }
    validate_new_frames(false, false);
}

function loadSchemataAndExamples() {
    $.ajaxJSON({
        method: 'get',
        url: ajax_get_schemata_and_examples,
        data: {
          lemma_id: window.lemma_id
        },

        callback: function(result) {
    	  window.schemas = serializedObjToObj(result['schemata']);
    	  window.nkjp_examples = serializedNkjpToObj(result['examples']);
    	  window.nkjp_lemma_examples = serializedNkjpToObj(result['lemma_examples']);
    	  resetLemmaVersions();
    	  var frame_class = 'InactiveFrameTable';
    	  if(result['can_modify']) {
    	      frame_class = 'ActiveFrameTable';
    	  }
    	  draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 
    			  			   'frame_filter', window.nkjp_examples, frame_class, 
    			  			   window.lemma_entry, window.lemma_entry);
          $('#examples').load(ajax_lemma_examples, 'id='+window.lemma_id, function(){
        	  draw_nkjp_table(document.getElementById("lemma_example_show"), '', 
        			          window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_')
              $("tr.NkjpLemmaTableRow").click(function(){selectLemmaNkjpTr(this.id)});
        	  HideProgressAnimation();
          });
          $("span#new-frames-count").empty();
          $("span#new-frames-count").append(window.schemas.length);
          $("span#lemma-examples-count").empty();
          $("span#lemma-examples-count").append(window.nkjp_lemma_examples.length);
        },
    });
}

function loadPrevSchemataAndExamples(hideWaitDialog) {
    $.ajaxJSON({
        method: 'get',
        url: ajax_get_schemata_and_examples,
        data: {
          lemma_id: window.prev_lemma_id
        },
        callback: function(result) {
          window.prev_frames = serializedObjToObj(result['schemata']);
          window.prev_nkjp_examples = serializedNkjpToObj(result['examples']);
    	  draw_filtered_frames(window.prev_frames, 'prev-lemma-tables', 'prev-lemma-table', 'prev_frame_filter', 
    			               window.prev_nkjp_examples, 'InactiveFrameTable', window.prev_lemma_entry);
    	  if(hideWaitDialog) {
    		  HideProgressAnimation();
    	  }
        },
    });
}

// klasa reprezentujaca wersje hasla, do cofania i dodawania
function Lemma_Version(schemas, nkjp_examples, nkjp_lemma_examples)
{
  	this.schemas = $.evalJSON($.toJSON(schemas));
  	this.nkjp_examples = $.evalJSON($.toJSON(nkjp_examples));
  	this.nkjp_lemma_examples = $.evalJSON($.toJSON(nkjp_lemma_examples));
}
  
 // position class
function position(id, text_rep, categories, arguments)
{
  	this.id = id;
  	this.text_rep = text_rep;
  	this.categories = categories;
  	this.arguments = arguments; 
  	this.error = false;
  	this.tooltip = '';
}
  
   // frame class
function frame(id, text_rep, characteristics, positions, opinion)
{
  	this.id = id
  	this.text_rep = text_rep;
    this.characteristics = characteristics;
    this.positions = positions;
    this.opinion = opinion;
    this.error = false;
    this.tooltip = '';
    this.is_phraseologic = false;
}  

function Nkjp_example(example_id, frame_id, arguments_ids, sentence, source, opinion, comment, semantic)
{
    this.example_id = example_id;
	this.frame_id = frame_id;
	this.arguments_ids = arguments_ids;
	this.sentence = sentence;
	this.source = source;
	this.opinion = opinion;
	this.comment = comment;
	this.semantic = semantic;
	this.lexical_unit = -1;
}

function Nkjp_example_ajax(frame, arg_selections, sentence, source, opinion, comment, semantic, lexical_unit)
{
	this.frame = frame;
	this.arg_selections = arg_selections;
	this.sentence = sentence;
	this.source = source;
	this.opinion = opinion;
	this.comment = comment;
	this.semantic = semantic;
	this.lexical_unit = lexical_unit;
}

function Nkjp_ArgSelection(position, arguments)
{
  this.position = position;
  this.arguments = arguments;
}

function frameToTableRows(frame)
{
    var rows = new Array();
    var max_arguments = 0;
    var number_of_positions = frame.positions.length;
    
    var positions_cat_row = new Array();
    for(var i=0; i < number_of_positions; i++)
    {
      positions_cat_row.push(frame.positions[i])
      if(max_arguments < frame.positions[i].arguments.length)
      	max_arguments = frame.positions[i].arguments.length;
    }
    
    rows.push(positions_cat_row);
  // appending table headers spans
    var span = new Array();
    span.push(number_of_positions);
    span.push(max_arguments);   
    rows.push(span);
 
    var arg_number = 0;
    
    for(var row_number=2; row_number<max_arguments+2; row_number++)
    {
      var arguments_row = new Array();
      for(var i=0; i < number_of_positions; i++)
      {
        if(frame.positions[i].arguments[arg_number])
          arguments_row.push(frame.positions[i].arguments[arg_number]);
        else
        {
          arguments_row.push(new argument(new_elem_id, '', '', []));
          new_elem_id--;
        }
      }  

      rows.push(arguments_row)
      arg_number++;
    }     
    return rows;
}


// puste frame_id oznacza rysowanie tabeli dla lemma
function draw_nkjp_table(parent, frame_id, nkjp_examples, row_class, td_id)
{
  $(parent).empty();
  var table = document.createElement('table');
  table.setAttribute('class', 'ExamplesTable');
  table.setAttribute('id', 'nkjp_table');
  	
  var tr = document.createElement('tr');
  var td = document.createElement('td');
  td.setAttribute('class', 'ColumnHeader');
  td.appendChild(document.createTextNode("Identyfikator:"));
  tr.appendChild(td);
  td = document.createElement('td');
  td.setAttribute('class', 'ColumnHeader');
  td.appendChild(document.createTextNode("Przykład:"));
  tr.appendChild(td);
  td = document.createElement('td');
  td.setAttribute('class', 'ColumnHeader');
  td.appendChild(document.createTextNode("Źródło:"));	
  tr.appendChild(td);
  td = document.createElement('td');
  td.setAttribute('class', 'ColumnHeader');
  td.appendChild(document.createTextNode("Ocena:"));	
  tr.appendChild(td);
  table.appendChild(tr);
  
  for(var k=0; k<nkjp_source_tab.length; k++)
  {
    for(var j=0; j<nkjp_opinion_tab.length; j++)
    {
      for(var i=0; i<nkjp_examples.length; i++)
      {  	
        if(nkjp_opinion_tab[j] == nkjp_examples[i].opinion && 
           nkjp_source_tab[k] == nkjp_examples[i].source &&
          (nkjp_examples[i].frame_id == frame_id || !frame_id)) // !frame_id oznacza, ze rysujemy wszystkie przyklady
        {
          var tdClass = '';
          if(nkjp_examples[i].semantic) {
        	  tdClass = 'Semantic';
          }
          tr = document.createElement('tr');
          tr.setAttribute('class', row_class);
          tr.setAttribute('id', td_id+nkjp_examples[i].example_id);
          td = document.createElement('td');
          td.setAttribute('class', tdClass);
          td.appendChild(document.createTextNode(nkjp_examples[i].example_id));
          tr.appendChild(td);
          td = document.createElement('td');
          td.setAttribute('class', tdClass);
          td.appendChild(document.createTextNode(nkjp_examples[i].sentence));
          tr.appendChild(td);
          td = document.createElement('td');
          td.setAttribute('class', tdClass);
          td.appendChild(document.createTextNode(nkjp_examples[i].source));
          tr.appendChild(td);
          td = document.createElement('td');
          td.setAttribute('class', tdClass);
          td.appendChild(document.createTextNode(nkjp_examples[i].opinion));
          tr.appendChild(td);
          table.appendChild(tr);
        }
      }
    }
  }
  parent.appendChild(table);
}

function selectNkjpTr(id)
{  	 
  if(window.selected_example_id != -1)
  {
  	var recent_row = document.getElementById(window.selected_example_id);
  	var recent_descendants = getDescendantsNodes(recent_row);
  	for(var i = 0; i<recent_descendants.length; i++)
  	  $(recent_descendants[i]).css("background-color", "");
  }
  	
  if(window.selected_example_id == id)
  {
  	  window.selected_example_id = -1;
  }
  else
  {
  	window.selected_example_id = id;
  	var row = document.getElementById(id);
  	var descendants = getDescendantsNodes(row);
  	for(var i = 0; i<descendants.length; i++)
  	  $(descendants[i]).css("background-color", "LightSteelBlue");  	  
  	nkjpInstance = getNkjpExampleInstance(window.nkjp_examples, id);
  	needConfirmation(nkjpInstance);
 
 // wyswietlanie komentarza jesli istnieje
    var last_shown_comm_elem = document.getElementById('example_comment');
  	$(last_shown_comm_elem).remove();
 
  	if(nkjpInstance.comment)
  	{
  	   var nkjp_table_container = document.getElementById("show_nkjp_table");
  	   
  	   var outer_div = document.createElement('div');
  	   outer_div.setAttribute('id', 'example_comment');
  	   var strong = document.createElement('strong');
  	   strong.appendChild(document.createTextNode("Komentarz do przykładu:"));
  	   outer_div.appendChild(strong);
  	   div = document.createElement('div');
  	   pre = document.createElement('pre');
  	   pre.appendChild(document.createTextNode(nkjpInstance.comment));
  	   div.appendChild(pre);
  	   outer_div.appendChild(div);
  	   nkjp_table_container.appendChild(outer_div);
  	}	 
  	
    var parent = document.getElementById("new-frame-tables");
    var matching_elements = getMatchingElements(parent, nkjpInstance.frame_id);
	for(var i=0; i<matching_elements.length; i++)
      $(matching_elements[i]).css("background-color", "LightSteelBlue");
      
    for(var i=0; i<nkjpInstance.arguments_ids.length; i++)
    {
      unselectTd(nkjpInstance.arguments_ids[i]);
    }
  }
}

function selectLemmaNkjpTr(id)
{  	 
  if(window.selected_lemma_example_id != -1)
  {
  	var recent_row = document.getElementById(window.selected_lemma_example_id);
  	var recent_descendants = getDescendantsNodes(recent_row);
  	for(var i = 0; i<recent_descendants.length; i++)
  	  $(recent_descendants[i]).css("background-color", "");
  }
  	
  if(window.selected_lemma_example_id == id)
  {
  	  window.selected_lemma_example_id = -1;
  	  resetForm($('.lemma-example-form'));
  }
  else
  {
  	window.selected_lemma_example_id = id;
  	var row = document.getElementById(id);
  	var descendants = getDescendantsNodes(row);
  	for(var i = 0; i<descendants.length; i++)
  	  $(descendants[i]).css("background-color", "LightSteelBlue");  
  		  
  	nkjpInstance = getNkjpLemmaExampleInstance(window.nkjp_lemma_examples, id);
  	fill_nkjp_example_form(nkjpInstance, '.lemma-example-form');
  }
}

function confirm_lemma_example(example_tabId)
{
  nkjpInstance = getNkjpLemmaExampleInstance(window.nkjp_lemma_examples, example_tabId);
  confirmNkjpExample(nkjpInstance);
}

function confirmNkjpExample(nkjpInstance)
{  	  
    ShowProgressAnimation();
    if(nkjpInstance.example_id < 0)
    {
      HideProgressAnimation();
      return false;
    }

    $.ajaxJSON({
      method: 'post',
      url: ajax_confirm_nkjp_example,
      data: {
        example_id: nkjpInstance.example_id,
        lemma_id: window.lemma_id
      },

    callback: function(result) {   
      if(nkjpInstance.frame_id) // przyklad dodany do schematu
        $("button#confirm_example").css("visibility","hidden"); 
      else // przyklad dodany do hasla
        $("button#confirm_lemma_example").css("visibility","hidden");
      HideProgressAnimation();	
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      HideProgressAnimation();
      return true;
    },
  });
  return false;
}

function needConfirmation(nkjpInstance) {
    $.ajaxJSON({
      method: 'get',
      url: ajax_can_confirm_example,
      data: {
        example_id: nkjpInstance.example_id,
        lemma_id: window.lemma_id
      },

    callback: function(result) {      
      if(result['can_confirm']) {
          $("button#confirm_example").css("visibility","visible");
      }
      else {
          $("button#confirm_example").css("visibility","hidden");
      }   	
    },
    error_callback: function(xhr, status, error) {
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      return true;
    },
  });
  return false;
}

function unpin_nkjp_example(example_tabId)
{ 
  if(example_tabId != -1 &&
	 !checkIfSemChangedAndAlert())
  {
    example_id = example_tabId.replace('nkjp_', '');
    for(var i=0; i<window.nkjp_examples.length; i++)
    {
      if(window.nkjp_examples[i].example_id == example_id)
      {
        if(confirm("Czy jesteś pewien, że chcesz odpiąć od schematu wskazany przykład?")){
          window.selected_example_id = -1;
          example = nkjp_examples[i];
          nkjp_examples.splice(i, 1);
          example.frame_id = ''
          example.arguments_ids = ''
          example.example_id = curr_lemma_example_id;
          window.nkjp_lemma_examples.push(example);
          window.curr_lemma_example_id--;
      // rysowanie tabeli nkjp examples na nowo
          draw_nkjp_table(document.getElementById("show_nkjp_table"), window.selectedFrameIdNkjp, window.nkjp_examples, 'NkjpTableRow', 'nkjp_');
          $("tr.NkjpTableRow").click(function(){
            selectNkjpTr(this.id)});
      // rysowanie tabeli lemma nkjp examples na nowo
          draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_');
          $("tr.NkjpLemmaTableRow").click(function(){
            selectLemmaNkjpTr(this.id)});
      // rysowanie tabel ze schematami
          scrollPosition = $('#new-frame-tables').scrollTop();
          draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
          $('#new-frame-tables').scrollTop(scrollPosition);
      // zapisanie nowej wartosci w tabeli modyfikacji
          window.frames_modif = window.frames_modif.slice(0, frames_modif_idx+1);     
          var lemma_version = new Lemma_Version(window.schemas, window.nkjp_examples, window.nkjp_lemma_examples);
          window.frames_modif.push(lemma_version);
          window.frames_modif_idx++;
          change = true;
        }
        break;
      }
    }
  }
}

function gotAssignedExample(nkjp_examples, element_id, deleteAction)
{
  var id_map = parseId(element_id);
  var frame_id = 'frame_'+id_map['frame_id']+'_';
  var assignedExamples = [];
  
  if(id_map['arg_id'] && deleteAction)
  {
    var arg_id = 'frame_'+id_map['frame_id']+'_pos_'+id_map['pos_id']+'_arg_'+id_map['arg_id']+'_';
    confirmed = false;
    for(var i=0; i<nkjp_examples.length; i++)
    {
      if(nkjp_examples[i].frame_id == frame_id)
      {
        for(var j=0; j<nkjp_examples[i].arguments_ids.length; j++)
        {
          if(nkjp_examples[i].arguments_ids[j] == arg_id)
          {
        	  if($.inArray(nkjp_examples[i], assignedExamples) === -1) 
        		  assignedExamples.push(nkjp_examples[i]);
          }
        }
      }
    }
  }
  else if(deleteAction)
  {
    if(!id_map['pos_id'])
    {
      confirmed = false;
      for(var i=0; i<nkjp_examples.length; i++)
      {
        if(nkjp_examples[i].frame_id == frame_id)
        {
      	  if($.inArray(nkjp_examples[i], assignedExamples) === -1) 
    		  assignedExamples.push(nkjp_examples[i]);
        }
      }   
    }    
    else if(id_map['pos_id'])
    {
      confirmed = false;
      var pos_id = 'frame_'+id_map['frame_id']+'_pos_'+id_map['pos_id']+'_';
      
      for(var i=0; i<nkjp_examples.length; i++)
      {
        for(var j=0; j<nkjp_examples[i].arguments_ids.length; j++)
        {
          if(nkjp_examples[i].arguments_ids[j].startsWith(pos_id))
          {
        	  if($.inArray(nkjp_examples[i], assignedExamples) === -1) 
        		  assignedExamples.push(nkjp_examples[i]);
          }
        }
      }   
    }
  }
  return assignedExamples;
}

function gotAssignedExampleId(nkjp_examples, element_id)
{
  var frame_id = 'frame_'+element_id+'_';
  for(var i=0; i<nkjp_examples.length; i++)
  {
    if(nkjp_examples[i].frame_id == frame_id)
    {
      return true;
    }
  }
  return false;
}

function getNkjpExampleInstance(nkjp_examples, example_id)
{
  var example_id = example_id.replace('nkjp_', '');
  for(var i=0; i<nkjp_examples.length; i++)
  {
    if(nkjp_examples[i].example_id == example_id)
      return nkjp_examples[i];
  }
  return '';
}

function getNkjpLemmaExampleInstance(nkjp_examples, example_id)
{
  var example_id = example_id.replace('nkjpLemma_', '');
  for(var i=0; i<nkjp_examples.length; i++)
  {
    if(nkjp_examples[i].example_id == example_id)
      return nkjp_examples[i];
  }
  return '';
}

function remove_semantic_example(example_id) {
  if(example_id != -1 && !checkIfSemChangedAndAlert())
  {
    example_id = example_id.replace('nkjp_', '');
    for(var i=0; i<nkjp_examples.length; i++)
    {
      if(nkjp_examples[i].example_id == example_id)
      {
        if(nkjp_examples[i].semantic) {
        	remove_example_from_lemma(window.lemma_id, example_id, i);
        	break;
        }
      }  
    }
  }
}

function remove_example_from_lemma(lemma_id, example_id, examplesTabId) {
	  ShowProgressAnimation();
	  jQuery.ajax({
		type: 'post',
	    url: ajax_remove_example_from_lemma,
	    data: {
	    	lemma_id: lemma_id,
	    	example_id: example_id
	    },
	    success: function(result) {
	        nkjp_examples.splice(examplesTabId, 1);  
			   
		    window.selected_example_id = -1;
		    var parent = document.getElementById("show_nkjp_table");
		    draw_nkjp_table(parent, selectedFrameIdNkjp, window.nkjp_examples, 'NkjpTableRow', 'nkjp_');  
		    $("tr.NkjpTableRow").click(function(){
		      selectNkjpTr(this.id)});
		    
		    scrollPosition = $('#new-frame-tables').scrollTop();
		    draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
		    $('#new-frame-tables').scrollTop(scrollPosition);  	      
	    	HideProgressAnimation();
	    },
	    error_callback: function(xhr, status, error) {
	        HideProgressAnimation();
	        error_alert(status + ': ' + error);
	    },
	    bad_data_callback: function(result) {
	        if (result == 'old lemma') {
	            HideProgressAnimation();
	            error_alert('Odśwież hasło, widoczna wersja nie jest aktualna.');
	            return false;
	          } 
	        else {
	          HideProgressAnimation();
	          return true;
	        }
	    }
	  });
}

function addFrameClickEvents(tableClass, tableId) {
	selector = 'table.'+tableClass+'#'+tableId+' td';
	if(tableId === 'new-frame-table') {
		if(tableClass === 'ActiveFrameTable') {
			$(selector).dblclick(function(e){
		        e.stopPropagation();
		        openEditForm(this.id)});
		}
	    $(selector).click(function(e){
	        e.stopPropagation();
	        selectTd(this.id)});		
	}
	else if(tableId === 'prev-lemma-table') {
		$(selector).click(function(e){
	        e.stopPropagation();
	        selectPrevTd(this.id)});
	}
}

function draw_frames(schemas, parent, table_name, nkjp_examples, table_class, lemma_entry)
{
  $(parent).empty();
  window.selectedArgumentsIdNkjp = new Array();
  addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames');
  addPhraseologicFramesPerm = user_has_perm('dictionary.add_phraseologic_frames');

  for(var i=0; i<window.reflex_vals.length; i++)
  {
	for(var l=0; l<window.neg_vals.length; l++)
	{
		for(var m=0; m<window.pred_vals.length; m++)
	    {
		    for(var k=0; k<window.aspect_vals.length; k++)
		    {
		      first = true;
		      for(var j=0; j<schemas.length; j++)
		      {
		        if(schemas[j].characteristics[3]==aspect_vals[k].value && schemas[j].characteristics[0]==reflex_vals[i].value && 
		           schemas[j].characteristics[1]==neg_vals[l].value && schemas[j].characteristics[2]==pred_vals[m].value)
		        {
		          if(first)
		          {
		            div = document.createElement('div');
		            strong = document.createElement('strong');
		            if(reflex_vals[i].value)
		  	          strong.appendChild(document.createTextNode(lemma_entry+" "+reflex_vals[i].name+" "+"("+neg_vals[l].name+","+pred_vals[m].name+","+aspect_vals[k].name+"):"));
		  	        else
		  	          strong.appendChild(document.createTextNode(lemma_entry+" "+"("+neg_vals[l].name+","+pred_vals[m].name+","+aspect_vals[k].name+"):"));
		  	        div.appendChild(strong);
		  	        parent.appendChild(div);
		            first = false;
		          }
		          var rows = frameToTableRows(schemas[j]);
		          frame_class = table_class;
		          if((schemas[j].is_phraseologic && !(addPhraseologicFramesPerm || addSyntacticFramesPerm)) ||
		        	 (!schemas[j].is_phraseologic && !addSyntacticFramesPerm))
		          {
		        	  frame_class = 'InactiveFrameTable';
		          }
		        	var table = document.createElement('table');
		          	parent.appendChild(table);
		          	var tr = document.createElement('tr');
		          	var td = document.createElement('td');
		          	
		          if(gotAssignedExampleId(nkjp_examples, schemas[j].id) && 
		            wholeCoordinationSpecified(schemas[j], nkjp_examples)) {
		        	  draw_table(td, schemas[j], rows, table_name, frame_class, 'CheckComp');
		          }
		          else if(gotAssignedExampleId(nkjp_examples, schemas[j].id)) {
		        	  draw_table(td, schemas[j], rows, table_name, frame_class, 'Check');
		          }
		          else {
		        	  draw_table(td, schemas[j], rows, table_name, frame_class, '');
		          }
		          tr.appendChild(td);
		          table.appendChild(tr);
		          
		        }
		      }
		    }
	    }
    }
  }
  addFrameClickEvents('InactiveFrameTable', table_name);
  addFrameClickEvents('ActiveFrameTable', table_name);
}

function goToFrame(tab_id, tables_div) {
	$(tables_div).scrollTo('#'+tab_id, {duration:'slow', offset:-10});
}

function draw_table(parent, frame, rows, table_id, table_class, coordinationClass)
{
  	var frame_table_container = parent;
  	frame_error = false;
  	var table = document.createElement('table');
  	table.setAttribute('class', table_class);
  	table.setAttribute('id', table_id);
  	if (frame.is_phraseologic) {
  		table.setAttribute('style', 'border:10px double gray;');
    }
  	
  	frame_table_container.appendChild(table);
  	
  	// wiersz opisujacy opinie na temat schematow
  	var tr = document.createElement('tr');
  	var td = document.createElement('td');
  	td.setAttribute('class', 'ColumnHeader');
  	td.appendChild(document.createTextNode("Schemat:"));
  	tr.appendChild(td);
  	 // pole z wartosciami cech schematu
  	td = document.createElement('td');
  	td.setAttribute('colspan', rows[1][0]);
  	td.setAttribute('id', 'frame_'+frame.id+'_');
  	td.setAttribute('class', 'ColumnCategory');
  	if(frame.error) {
  	  frame_error = true;
  	  td.setAttribute('style', 'background-color:red;'); 
  	  td.setAttribute('title', frame.tooltip);
  	}
  	
  	span_op = document.createElement('span');
  	span_op.setAttribute('class', 'Opinion');
  	span_op.appendChild(document.createTextNode(frame.opinion + ' ['+frame.id+']'));
  	td.appendChild(span_op);
  	span_img = document.createElement('span');
  	span_img.setAttribute('class', coordinationClass);
  	td.appendChild(span_img);
  	tr.appendChild(td);
  	table.appendChild(tr);// koniec pierwszego wiersza
  	
  	// wiersz opisujacy funkcje pozycji
  	tr = document.createElement('tr');
  	td = document.createElement('td');
  	td.setAttribute('class', 'ColumnHeader');
  	td.appendChild(document.createTextNode("Funkcja:"));
  	tr.appendChild(td);
  	
  	// pola z wartosciami funkcji pozycji
  	error_col = -1;
  	for(var i=0; i<frame.positions.length; i++)
  	{
  	  var position = frame.positions[i];
  	  td = document.createElement('td');
  	  td.setAttribute('id', 'frame_'+frame.id+'_pos_'+position.id+'_');
  	  td.setAttribute('class', 'position');
  	  if(position.error || frame_error)
  	  {
  	    error_col = i;
  	    td.setAttribute('style', 'background-color:red;');
  	  }
  	  if(position.error)
  	    td.setAttribute('title', position.tooltip);
  	  td.appendChild(document.createTextNode(position.categories.join(',')));
  	  tr.appendChild(td);
  	}
  	table.appendChild(tr); // koniec wiersza opisujacego funkcje pozycji
  	
  	// wiersze opisujace typy fraz w pozycjach
  	tr = document.createElement('tr'); 
  	td = document.createElement('td');
  	td.setAttribute('rowspan', rows[1][1]);
  	td.setAttribute('class', 'ColumnHeader');
  	td.appendChild(document.createTextNode("Typy fraz:"));
  	tr.appendChild(td);
  	
  	for(var row = 2; row<rows.length;row++)
  	{
  	  if(row > 2)
  	    tr = document.createElement('tr');
  	    
  	  for(var col=0; col<frame.positions.length; col++)
  	  {
  	    td = document.createElement('td');
  	    td.setAttribute('class', 'arg');
  	    td.setAttribute('id', 'frame_'+frame.id+'_pos_'+frame.positions[col].id+'_arg_'+rows[row][col].id+'_');
  	    if(rows[row][col].error || frame.positions[col].error || frame_error)
  	    {
  	      td.setAttribute('style', 'background-color:red;');
  	    }
  	    if(rows[row][col].error)
  	      td.setAttribute('title', rows[row][col].tooltip);
  	    
  	    td.appendChild(document.createTextNode(rows[row][col].text_rep)); 
  	    tr.appendChild(td);
  	  }
  	  table.appendChild(tr);
  	}	
}

function createSplitter(split_id, top_id, bottom_id) {
  $('#'+split_id).height($('#right').height() - 70);
  if ($.fn.splitter) {
	$(window).resize(function() {
		$('#'+split_id).height($('#right').height() - 70);
	});
    $('#'+top_id).bind('resize', function(e) {
      e.stopPropagation();
    });
    $('#'+bottom_id).bind('resize', function(e) {
      e.stopPropagation();
    });
    $('#'+split_id).splitter({
      type: "h",
      minTop: 200,
      minBottom: 50,
      sizeBottom: 170,
      resizeToWidth: true
    });
  }
}

///////////////////////////////////////////////////////////////////////////////////
 
 String.prototype.trim = function()
 {return (this.replace(/^\s+|\s+$/g, ''))}

function assignPhraseologicFrameFormSubmit() {
    ShowProgressAnimation();
    this_form = $(this);
    
    form_data = this_form.serializeArray();
    var entry = '';
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'entry' && elem.name != 'phraseologic_frame')
        return elem;
      else {
        if (elem.name == 'entry')
          entry = elem.value;
        else if (elem.name == 'phraseologic_frame')
        	phraseologic_frame = elem.value;
      }
    });

	form_data.push({name: 'entry', value: entry});
	form_data.push({name: 'phraseologic_frame', value: phraseologic_frame});

    $.ajaxJSON({
      method: 'post',
      url: ajax_assign_phraseologic_frame,
      data: {
        form_data: form_data,
        lemma_id: window.lemma_id,
      },

    callback: function(result) {
      HideProgressAnimation();	
      openAssignPhraseologicFrameDialog();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result) {
        HideProgressAnimation();
        error_alert(result);
        return false;
      } 
      else {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}

function add_pos_form_submit() {
    ShowProgressAnimation();
    this_form = $(this);
    
    form_data = this_form.serializeArray();
    categories = [];
    args = [];
    position_id = -1;
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'frequent_positions' && elem.name != 'filtered_positions')
        return elem;
      else {
        if (elem.name == 'frequent_positions')
          frequent_positions = elem.value;
        else if (elem.name == 'filtered_positions')
          filtered_positions = elem.value;
      }
    });

	form_data.push({name: 'frequent_positions', value: frequent_positions});
    form_data.push({name: 'filtered_positions', value: filtered_positions});

    $.ajaxJSON({
      method: 'post',
      url: ajax_add_position,
      data: {
        form_data: form_data
      },

    callback: function(result) {
      var catsObj = eval('(' + result["categories"] + ')');
      var argsObj = eval('(' + result["arguments"] + ')');
      
      var arguments = new Array();
      for(var i=0; i<argsObj.length; i++)
      {
        arguments.push(new argument(argsObj[i].pk, argsObj[i].fields.text_rep, argsObj[i].fields.type, []));
      }
      
      var cats = new Array();
      for(var i=0; i<catsObj.length; i++)
      {
        cats.push(catsObj[i].fields.category);
      }

      pos_id = new_elem_id;
      new_elem_id--;
      
      var pos = $.evalJSON($.toJSON(window.emptyPosition));
      pos.id = pos_id;
      pos.text_rep = result["text_rep"];
      pos.categories = cats;
      pos.arguments = arguments;
      
      schemas = addFramePosition(selected_id, schemas, pos);
      window.selected_id = -1;
      
      this_form.closest("$[id$='-dialog']").dialog('close');
      scrollPosition = $('#new-frame-tables').scrollTop();
      draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
      $('#new-frame-tables').scrollTop(scrollPosition);
        
      frames_modif = frames_modif.slice(0, frames_modif_idx+1);
      var lemma_version = new Lemma_Version(schemas, window.nkjp_examples, window.nkjp_lemma_examples);
      frames_modif.push(lemma_version);
      frames_modif_idx++;
      change = true;
      HideProgressAnimation();	
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'not proper selection') {
        HideProgressAnimation();
        error_alert('Wybierz tylko jedną pozycję.');
        return false;
      }
      else if (result == 'wrong position representation')
      {
        HideProgressAnimation();
        error_alert('Niewłaściwie zapisana reprezentacja tekstowa pozycji.');
        return false;
      }   
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}
 
function addFrameElementDialog(id, schemas)
{    
  if(id!=-1 && id.startsWith('frame'))
  {
    var ids = parseId(id);
    var frame_id = ids['frame_id'];
    var pos_id = ids['pos_id'];
    var arg_id = ids['arg_id'];
      
    for(var i=0; i<schemas.length; i++)
    {
      if(schemas[i].id == frame_id && pos_id)
      {
        for(var j=0; j<schemas[i].positions.length; j++)
        {
          if(schemas[i].positions[j].id == pos_id && arg_id)
          {
          	return schemas;
          }
          else if(schemas[i].positions[j].id == pos_id)
          {
            // dodawanie argumentu do pozycji
        	positionArguments = schemas[i].positions[j].arguments; 
            $('#add-table-elem-dialog').data('positionArguments', positionArguments)
            						   .data('selectedFrame', schemas[i])
            						   .load(ajax_argument_form, {'form_data' : '',
            							   						  'lemma_id': window.lemma_id,
				                                                  'position_arguments': JSON.stringify(positionArguments),
				                                                  'phraseologic': false})
				                       .dialog( "option", "title", "Dodawanie typu frazy:" ).dialog('open');   
            new_elem_id--; 
            return window.schemas;
          }
        }
      }
      else if(schemas[i].id == frame_id) // dodawanie pozycji do schematu
      {
        // nowa pozycja
    	// TODO wyklucznie w czestych pozycjach, poprawic!!
    	$('#add-table-elem-dialog').load(ajax_position_form, {'lemma_id': window.lemma_id,
    														  'phraseologic': schemas[i].is_phraseologic}).dialog( "option", "title", "Dodawanie pozycji:" ).dialog('open');
        new_elem_id--;    
        return window.schemas;
      }
    }
  }
  else if(user_has_perm('dictionary.add_syntactic_frames')) // dodawanie nowego pustego schematu
  { 
    window.addedFrame = $.evalJSON($.toJSON(window.emptyFrame));
    window.addedFrame.id = new_elem_id;
    form_data = new Array();
  	form_data.push({name: 'opinion', value: window.addedFrame.opinion});
  	form_data.push({name: 'characteristics', value: window.addedFrame.characteristics}); 
  	form_data.push({name: 'edit', value: false});
  	form_data.push({name: 'lemma_id', value: window.lemma_id});
    data = JSON.stringify(form_data);   
    $('#add-table-elem-dialog').load(ajax_frame_form, {'form_data': data}, function(){
        $('#aspect-relations-frames').load(ajax_aspect_rel_missing_frames, {'lemma_id': window.lemma_id,
        	                                                                'frames': JSON.stringify(window.schemas),
        	                                                                'editable': true}, 
        function() {
    		$('#aspect-rel-missing-frames tr.MissFrame td.Frame').click(function(e) {
    			e.stopPropagation();
    		    selectTableTr(this.parentNode.id);
    		});
        });
    	$('#add-frame-tabs').tabs();
    }).dialog( 'option', 'title', 'Dodawanie nowych schematów:' ).dialog('option', 'width', 500)
    														 .dialog('open');
    new_elem_id--;
    return window.schemas;
  }
  return schemas;
}

function can_add_position_category(lemma_id) {
	  can_add_category = false;
	  jQuery.ajax({
		type: 'get',
	    url: ajax_can_add_position_category,
	    data: {lemma_id: lemma_id},
	    success: function(result) {
	    	can_add_category = result['can_add_category'];
	    },
	    async:false
	  });
	  return can_add_category;
}

function openEditForm(id) {
  if(!checkIfSemChangedAndAlert()) {
	  editedFrameInstance = getFrameInstance(id, window.schemas);
	  elemInstance = getElementInstance(id, window.schemas);
	  addSyntacticFramesPerm = user_has_perm('dictionary.add_syntactic_frames');
	  addPhraseologicFramesPerm = user_has_perm('dictionary.add_phraseologic_frames') && editedFrameInstance['element'].is_phraseologic;
	  
	  window.edited_id = id;
	  	  
	  if(elemInstance['type'] == 'frame' && (addSyntacticFramesPerm || addPhraseologicFramesPerm))
	  {
		if(gotAssignedExample(nkjp_examples, id, true).length > 0) {
			alert('Działaj rozważnie, do modyfikowanego elementu przyporządkowany jest przykład.');
		}
	    form_data = new Array();
	    form_data.push({name: 'opinion', value: elemInstance['element'].opinion});
	    form_data.push({name: 'characteristics', value: elemInstance['element'].characteristics});  
	    form_data.push({name: 'edit', value: true});
	    form_data.push({name: 'lemma_id', value: window.lemma_id});
	    data = JSON.stringify(form_data);

	    $('#add-table-elem-dialog').load(ajax_frame_form, {'form_data': data,
	    												   'phraseologic': elemInstance['element'].is_phraseologic}, function(){
	    	$('#new-frames-tabs').hide();
	    }).data('selectedFrame', editedFrameInstance['element'])
	      .dialog( 'option', 'title', 'Edycja cech schematu:' )
	      .dialog('open');
	  }
	  else if(elemInstance['type'] == 'position' && (addSyntacticFramesPerm || addPhraseologicFramesPerm) && 
			  can_add_position_category(window.lemma_id))
	  {
		if(gotAssignedExample(nkjp_examples, id, true).length > 0) {
			alert('Działaj rozważnie, do modyfikowanego elementu przyporządkowany jest przykład.');
		}
	    form_data = new Array();
	    form_data.push({name: 'categories', value: elemInstance['element'].categories});   
	    data = JSON.stringify(form_data)
	    $('#add-table-elem-dialog').load(ajax_pos_cat_form, 'form_data='+data)
	    	.data('selectedFrame', editedFrameInstance['element'])
	    	.dialog( 'option', 'title', 'Edycja funkcji pozycji:' )
	        .dialog('open'); 
	  }
	  else if(elemInstance['type'] == 'argument' && 
			  (addSyntacticFramesPerm || addPhraseologicFramesPerm))
	  {
		edited_arg_id = getArgumentId(elemInstance['element'].text_rep);
		if(gotAssignedExample(nkjp_examples, id, true).length > 0) {
			alert('Działaj rozważnie, do modyfikowanego elementu przyporządkowany jest przykład.');
		}
	    if(addSyntacticFramesPerm || 
	    		(addPhraseologicFramesPerm && arg_can_be_lexicalized(edited_arg_id))) {
	    	$('#add-table-elem-dialog')
	    		.data('selectedArgId', edited_arg_id)
	    		.data('selectedFrame', editedFrameInstance['element'])
	    		.dialog( "option", "title", "Edycja typu frazy:" )
	    		.dialog('open');
	    	arguments_form_change(-1, edited_arg_id, $('#add-table-elem-dialog'), window.lemma_id);
	    }
	  }   
  }
}

function getArgumentId(text_rep) {
	  arg_id = null;
	  jQuery.ajax({
		type: 'get',
	    url: ajax_get_arg_id,
	    data: {text_rep: text_rep},
	    success: function(result) {
	      arg_id = result['arg_id'];
	    },
	    async:false
	  });
	  return arg_id;
}

// konwertuje przyklady do latwiej definiowalnych na bazie danych
function convertExamples(nkjp_examples)
{
    var convertedExamples = new Array();
    for(var i=0; i<nkjp_examples.length; i++)
    {
       convertedExample = convertExample(nkjp_examples[i]);
       convertedExamples.push(convertedExample); 
    }
    return convertedExamples;
}

function convertExample(nkjp_example)
{
    var argument_selections = new Array();
       
    // zbieranie listy pozycji z ktorych wybrano argumenty
    for(var j=0; j<nkjp_example.arguments_ids.length; j++)
    {       
      var ids = parseId(nkjp_example.arguments_ids[j]);
      pos_id = nkjp_example.arguments_ids[j].replace('arg_'+ids['arg_id']+'_','');
      positionInstance = getElementInstance(pos_id, schemas);
      position = positionInstance['element'];  
      newPosition = true;
         
      for(var k=0; k<argument_selections.length; k++)
      {
        if(argument_selections[k].position == position)
        {
          newPosition = false;
          break;
        }
      }
      if(newPosition)
        argument_selections.push(new Nkjp_ArgSelection(position, new Array()));
    }
       
    // przyporzadkowanie argumentow pozycjom 
    for(var j=0; j<nkjp_example.arguments_ids.length; j++)
    {         
	  for(var k=0; k<argument_selections.length; k++)
	  {
	    if(nkjp_example.arguments_ids[j].startsWith(nkjp_example.frame_id+'pos_'+argument_selections[k].position.id+'_'))
	    {
	      var argInstance = getElementInstance(nkjp_example.arguments_ids[j], schemas);
	      argument_selections[k].arguments.push(argInstance['element']);
	    }
	  }         
    }   
    frame = getElementInstance(nkjp_example.frame_id, schemas);
         
    var convertedExample = new Nkjp_example_ajax(frame['element'], argument_selections, 
    		nkjp_example.sentence, nkjp_example.source, 
    		nkjp_example.opinion, nkjp_example.comment,
    		nkjp_example.semantic, nkjp_example.lexical_unit);
       
    return convertedExample;
}

// konwertuje przyklady do latwiej definiowalnych na bazie danych
function convertLemmaExamples(lemma_examples)
{
  lemma_examples_dict_list = []
  for(var i=0; i<lemma_examples.length; i++)
  {
    example_dict = convertLemmaExample(lemma_examples[i]); 
    lemma_examples_dict_list.push(example_dict);
  }
  return lemma_examples_dict_list;
}

function convertLemmaExample(lemma_example)
{
  example_dict = {'sentence': lemma_example.sentence,
                  'source'  : lemma_example.source,
                  'comment' : lemma_example.comment,
                  'opinion' : lemma_example.opinion};                  
  return example_dict;
}

function findRelatedArguments(arg_id, frame_id, nkjp_examples)
{
  var relatedArguments = new Array();
  for(var i=0; i<window.nkjp_examples.length; i++)
  {
    if(window.nkjp_examples[i].frame_id == frame_id)
    {
      for(var j=0; j<window.nkjp_examples[i].arguments_ids.length; j++)
      {
        if(window.nkjp_examples[i].arguments_ids[j] == arg_id)
        {
          for(var k=0; k<window.nkjp_examples[i].arguments_ids.length; k++)
          {
            relatedArguments.push(window.nkjp_examples[i].arguments_ids[k])
          }
          break;
        }
      }
    }
  } 
  return relatedArguments; 
}

function clear_errors(schemas)
{
  for(var i=0; i<schemas.length; i++)
  {
	schemas[i].error = false;
    for(var j=0; j<schemas[i].positions.length; j++)
    {
      schemas[i].positions[j].error = false;
      for(var k=0; k<schemas[i].positions[j].arguments.length; k++)
    	 schemas[i].positions[j].arguments[k].error = false;
    }
  }
}


function save_new_frames() {
  if(checkIfSemChangedAndAlert()) {
	  return false;
  }
  if(notesNotSaved && !confirm("Czy jesteś pewien, że chcesz zapisać hasło? Utracone zostaną dane wpisane w formularzu tworzenia notatek.")){
      return false;
  }
  if(lemmaExNotSaved && !confirm("Czy jesteś pewien, że chcesz zapisać hasło? Utracone zostaną dane zapisane w formularzu tworzenia przykładów niedowiązanych.")){
      return false;
  }
  ShowProgressAnimation();
  $('#save').attr("disabled", true);

    data = JSON.stringify(schemas);
	var convertedExamples = convertExamples(window.nkjp_examples);
	examples_data = JSON.stringify(convertedExamples);
	
	var convertedLemmaExamples = convertLemmaExamples(window.nkjp_lemma_examples);
	lemma_examples_data = JSON.stringify(convertedLemmaExamples)

    $.ajaxJSON({
      method: 'post',
      url: ajax_save_new_frames,
      data: {
        data: data,
        id: lemma_id,
        examples: examples_data,
        lemma_examples: lemma_examples_data,
      },

    callback: function(result) {  
      $('#save').attr("disabled", false);
      change = false;    
      window.lastSelectedId = result['id'];
      grid.trigger("reloadGrid");

      data = grid.jqGrid('getGridParam', 'postData');
      data['mask'] = '';
      data['id'] = result['id'];
      window.lemma_id = result['id'];

      $.get(ajax_location, data, function(resp) {
        var selectedRow = resp['selected_id'] + "";
        var rowIndex = resp['rowIndex'];
        var recordsCount = resp['records'];
        if (recordsCount > 0 && !resp['lemma_nfound']){
         grid.jqGrid('scrollToRow', rowIndex, recordsCount);
         load_content(window.lemma_id);
        }
        else if(resp['lemma_nfound'])
        {
          load_content(window.lemma_id);
        } 
      });
      HideProgressAnimation();
    },
    bad_data_callback: function(result) {
      if (result == 'concurrent access') {
        HideProgressAnimation();
        error_alert('Hasło jest w tej chwili zapisywane przez kogoś innego.');
        $('#save').attr("disabled", false);
        return false;
      }
      else if(result == 'old version') {
    	HideProgressAnimation();
        error_alert('Nie można zapisywać zmian na nieaktualnej wersji hasła.');
        $('#save').attr("disabled", false);
        return false;
      }
      else if(result == 'user logged out') {
      	HideProgressAnimation();
      	alertUserNotAuthenticated();
        $('#save').attr("disabled", false);
        return false;
      }
      else {
        $('#save').attr("disabled", false);
        HideProgressAnimation();
        return true;
      }        
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
      $('#save').attr("disabled", false);
    },
  });
  return false;
}

function changeFrameExamplesIds(nkjp_examples, frame_id, new_frame_id)
{
  var frame_tabId = 'frame_'+frame_id+'_';
  var new_frame_tabId = 'frame_'+new_frame_id+'_';
  
  for(var i=0; i<nkjp_examples.length; i++)
  {
    if(nkjp_examples[i].frame_id == frame_tabId)
    {
      nkjp_examples[i].frame_id = new_frame_tabId;
      for(var j=0; j<nkjp_examples[i].arguments_ids.length; j++)
      {
        nkjp_examples[i].arguments_ids[j] = nkjp_examples[i].arguments_ids[j].replace(frame_tabId, new_frame_tabId);
      }
    }
  }   
}

function getActualLemmaId(chosenId) {
  var actualId = chosenId;
  jQuery.ajax({
	type: 'get',
    url: ajax_get_actual_lemma_id,
    data: {chosen_id: chosenId},
    success: function(result) {
    	actualId = result['actual_id'];
    },
    async: false
  });
  return actualId;
}

function userIsAuthenticated() {
	  var authenticated = false;
	  jQuery.ajax({
		type: 'get',
	    url: ajax_user_is_authenticated,
	    success: function(result) {
	    	authenticated = result['authenticated'];
	    },
	    async: false
	  });
	  return authenticated;
	}

function changePosExamplesIds(nkjp_examples, frame_id, old_pos_id, new_pos_id)
{
  var frame_tabId = 'frame_'+frame_id+'_';
  var new_pos_tabId = 'pos_'+new_pos_id+'_';
  var old_pos_tabId = 'pos_'+old_pos_id+'_';
  
  for(var i=0; i<nkjp_examples.length; i++)
  {
    if(nkjp_examples[i].frame_id == frame_tabId)
    {
      for(var j=0; j<nkjp_examples[i].arguments_ids.length; j++)
      {
        nkjp_examples[i].arguments_ids[j] = nkjp_examples[i].arguments_ids[j].replace(old_pos_tabId, new_pos_tabId);
      }
    }
  }   
}

function frame_form_submit() {
    ShowProgressAnimation();
	this_form = $(this);
	base_frame = null;
    form_data = this_form.serializeArray();
    var selected_examples = [];
    var propose_phraseology = null;
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'aspect' && elem.name != 'frame_opinion' && 
         elem.name != 'reflex' && elem.name != 'predicativity' &&
         elem.name != 'propose_skladnica' && elem.name != 'propose_B' &&
         elem.name != 'negativity' && elem.name != 'base_frame' && 
         elem.name != 'propose_phraseology')
        return elem;
      else {
        if (elem.name == 'aspect')
          aspect = elem.value;
        else if (elem.name == 'reflex')
          reflex = elem.value;
        else if (elem.name == 'negativity')
        	negativity = elem.value;
        else if (elem.name == 'predicativity')
        	predicativity = elem.value;
        else if (elem.name == 'frame_opinion')
          frame_opinion = elem.value;
        else if (elem.name == 'base_frame')
        	base_frame = elem.value; 
        else if (elem.name == 'propose_skladnica')
            propose_skladnica = elem.value;
        else if (elem.name == 'propose_B')
            propose_B = elem.value;
        else if (elem.name == 'propose_phraseology')
        	propose_phraseology = elem.value;
      }
    });
    
    if(window.addedFrame) {
      frame = JSON.stringify(window.addedFrame);
    }
    else if(propose_phraseology) {
    	frame = '';
    }
    else {
    	  elemInstance = getElementInstance(window.edited_id, schemas);
    	  frame = JSON.stringify(elemInstance['element']);	  
    }
    if (typeof(frame) == "undefined") {
    	frame = '';
    }

	form_data.push({name: 'aspect', value: aspect});
	form_data.push({name: 'reflex', value: reflex});
	form_data.push({name: 'negativity', value: negativity});
	form_data.push({name: 'predicativity', value: predicativity});
    form_data.push({name: 'opinion', value: frame_opinion});
    form_data.push({name: 'frame_str', value: frame});
    form_data.push({name: 'lemma_id', value: lemma_id});
    form_data.push({name: 'base_frame', value: base_frame});
    form_data.push({name: 'propose_skladnica', value: propose_skladnica});
    form_data.push({name: 'propose_B', value: propose_B});
    if(propose_phraseology != null)
    	form_data.push({name: 'propose_phraseology', value: propose_phraseology});
    
    $('#example-propositions tr').filter(function(){
        var color = $(this).css("background-color").toLowerCase();
        if(color === window.selectedColor)
        	selected_examples.push($(this).attr('id'));
    });

    selected_realization = $('#realization-select').val();
    if(!selected_realization)
    	selected_realization = '';
    form_data.push({name: 'frame_realization', value: selected_realization});
    form_data.push({name: 'selected_examples', value: selected_examples});
    
    $.ajaxJSON({
      method: 'post',
      url: ajax_frame_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) {  
      edited_frame_id = null;
      old_edited_frame_id =  '';
      if(window.addedFrame) {
        edited_frame = $.evalJSON($.toJSON(window.addedFrame));
        edited_frame = serializedObjToObj(result['frame']);
        edited_frame.id = window.addedFrame.id;
        edited_frame.text_rep = result['text_rep'];
        edited_frame.characteristics = result['characteristics'];
        edited_frame.opinion = result['opinion'];
        edited_frame.is_phraseologic = result['phraseologic'];
        edited_frame_id = window.addedFrame.id;
        
        examples = serializedNkjpToObj(result['examples']);
        if(examples.length > 0)
        {
            for(var i = 0; i<examples.length; i++)
            {
            	examples[i].example_id = window.curr_example_id;
            	window.curr_example_id--;
            	window.nkjp_examples.push(examples[i]);
            }
        }
        window.schemas.push(edited_frame);
        changeFrameExamplesIds(window.nkjp_examples, result['id'], window.addedFrame.id);
      }
      else if(result['phraseologic']) {
          edited_frame = serializedObjToObj(result['frame']);
          edited_frame.id = new_elem_id;
          new_elem_id--;
          edited_frame.text_rep = result['text_rep'];
          edited_frame.characteristics = result['characteristics'];
          edited_frame.opinion = result['opinion'];
          edited_frame.is_phraseologic = result['phraseologic'];
          edited_frame_id = edited_frame.id;
          window.schemas.push(edited_frame);
      }
      else {
        edited_frame = getElementInstance(edited_id, schemas);
        var old_edited_frame_id = edited_frame['element'].id;
        edited_frame['element'].id = new_elem_id; //tutaj zmienilem
        //edited_frame['element'].id = result['id'];
        edited_frame_id = edited_frame['element'].id;
        new_elem_id--;
        edited_frame['element'].text_rep = result['text_rep'];
        edited_frame['element'].characteristics = result['characteristics'];
        edited_frame['element'].opinion = result['opinion'];
        changeFrameExamplesIds(window.nkjp_examples, old_edited_frame_id, edited_frame['element'].id);
      }      
      
      $('#add-table-elem-dialog').dialog('close');
      draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);   
      goToFrame('frame_'+edited_frame_id+'_', document.getElementById('new-frame-tables'));
       
      frames_modif = frames_modif.slice(0, frames_modif_idx+1);
      var lemma_version = new Lemma_Version(schemas, window.nkjp_examples, window.nkjp_lemma_examples);
      frames_modif.push(lemma_version);
      frames_modif_idx++;
      change = true;	
      HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'empty fields error') {
        HideProgressAnimation();
        error_alert('Wypełnij wszystkie niezbędne pola formularza.');
        return false;
      }
      else if (result == 'data error') {
          HideProgressAnimation();
          error_alert('Brakuje danych do stworzenia schematu.');
          return false;
      }
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}

function add_aspect_rel_frames() {
    ShowProgressAnimation();
    var selected_frames = [];
    
    $('#aspect-rel-missing-frames tr').filter(function(){
        var color = $(this).css("background-color").toLowerCase();
        if(color === window.selectedColor)
        	selected_frames.push({'frame'  : $(this).attr('id'),
        		                  'aspect' : $(this).find('#id_aspect').val(),
        		                  'opinion': $(this).find('#id_opinion').val()});
    });
    form_data.push({name: 'lemma_id', value: window.lemma_id});
    form_data.push({name: 'selected_frames', value: selected_frames});
    
    $.ajaxJSON({
      method: 'post',
      url: ajax_add_new_frames,
      data: {
        form_data: form_data
      },

    callback: function(result) {   
    	if(result['new_frames'].length > 0)
    	{
    		new_frames = serializedObjToObj(result['new_frames']);
    		for(var i = 0; i<result['new_frames'].length; i++)
    	    {
    			new_frame = serializedObjToObj(result['new_frames'][i]);
    			new_frame.id = window.new_elem_id;
    			window.schemas.push(new_frame);
    	        window.new_elem_id--;
    	    }
          
    		$('#add-table-elem-dialog').dialog('close'); 
    		draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);   
    		   
    		frames_modif = frames_modif.slice(0, frames_modif_idx+1);
    		var lemma_version = new Lemma_Version(schemas, window.nkjp_examples, window.nkjp_lemma_examples);
    		frames_modif.push(lemma_version);
    		frames_modif_idx++;
    		change = true;	
    	}
		HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
  });
  return false;
}

function pos_cat_form_submit() {
    ShowProgressAnimation();
	this_form = $(this);
    form_data = this_form.serializeArray();
    var control = new Array(); 
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'category' && elem.name != 'control')
        return elem;
      else {
        if (elem.name == 'category')
          category = elem.value;
        else if (elem.name == 'control')
          control.push(elem.value);
      }
    });
    
	elemInstance = getElementInstance(window.edited_id, schemas);
    position = JSON.stringify(elemInstance['element']);

	form_data.push({name: 'category', value: category});
    form_data.push({name: 'control', value: control});
    form_data.push({name: 'position_str', value: position});

    $.ajaxJSON({
      method: 'post',
      url: ajax_pos_cat_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) {      
      edited_pos = getElementInstance(edited_id, schemas);
      var edited_old_pos_id = edited_pos['element'].id    
      var frame_id = parseId(edited_id)['frame_id'];    

      edited_pos['element'].id = result['id'];
      edited_pos['element'].text_rep = result['text_rep'];
      edited_pos['element'].categories = result['categories'];
      changePosExamplesIds(window.nkjp_examples, frame_id, edited_old_pos_id, result['id']);    
      
      $('#add-table-elem-dialog').dialog('close'); 
      
      scrollPosition = $('#new-frame-tables').scrollTop();
      draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
      $('#new-frame-tables').scrollTop(scrollPosition);
        
      frames_modif = frames_modif.slice(0, frames_modif_idx+1);
      var lemma_version = new Lemma_Version(schemas, window.nkjp_examples, window.nkjp_lemma_examples);
      frames_modif.push(lemma_version);
      frames_modif_idx++;
      change = true;	
      HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      HideProgressAnimation();
      return true;
    },
  });
  return false;
}
//////////////////////////////// lemma notes //////////////////////////////

function lemma_notes_form_submit() {
    ShowProgressAnimation();
	this_form = $(this);	
    form_data = this_form.serializeArray();
    private_flag = false;
    var is_ready_note = false; 
  
    form_data = $.map(form_data, function(elem)
    { 
      if (elem.name != 'topic' && elem.name != 'message_text' &&
         elem.name != 'private')
        return elem;
      else {
        if (elem.name == 'topic')
          topic = elem.value;
        else if (elem.name == 'message_text')
          message_text = elem.value;
        else if (elem.name == 'private')
          private_flag = true;
      }
    });
    
    if(this.id == "ready-note-form") {
      private_flag = false;
      is_ready_note = true;
    }
    
	form_data.push({name: 'topic', value: topic});
    form_data.push({name: 'message_text', value: message_text});
    form_data.push({name: 'private', value: private_flag});
    form_data.push({name: 'lemma_id', value: window.lemma_id});
    form_data.push({name: 'is_ready_note', value: is_ready_note});

    $.ajaxJSON({
      method: 'post',
      url: ajax_lemma_notes_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) {      
    	$('#ready-note-dialog').dialog('close');
        $('#notes').load(ajax_lemma_notes, 'id='+result['id']);
        window.notesNotSaved = false;
        HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'required fields not selected') {
        HideProgressAnimation();
        error_alert('Należy wypełnić temat oraz treść wiadomości.');
        return false;
      } 
      else if (result == 'initial status') {
          HideProgressAnimation();
          error_alert('Nie rozpoczęto jeszcze obróbki wybranego hasła.');
          return false;
        } 
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}

function selectNotesTr(id)
{  	  
  	if(selected_notes_row_id != -1)
  	{
  	  var recent_row = document.getElementById(selected_notes_row_id);
  	  var recent_descendants = getDescendantsNodes(recent_row);
  	  for(var i = 0; i<recent_descendants.length; i++)
  	    $(recent_descendants[i]).css("background-color", "");
  	}
  	
  	if(selected_notes_row_id == id)
  	{
  	  selected_notes_row_id = -1;
  	  resetForm($('.lemma-notes-form'));
    }  	
  	else
  	{
  	  ShowProgressAnimation();
  	  selected_notes_row_id = id;
  	  var row = document.getElementById(id);
  	  var descendants = getDescendantsNodes(row);
  	  for(var i = 0; i<descendants.length; i++)
  	    $(descendants[i]).css("background-color", "LightSteelBlue");
  	  message_id = id.replace('note_', '');
  	  
  	  $.ajaxJSON({
        method: 'post',
        url: ajax_get_lemma_note,
        data: {
              message_id: message_id, 
        },
        callback: function(result) {
          if(result['private'])
		    $('.lemma-notes-form #id_private').attr('checked', true);
		  else
		    $('.lemma-notes-form #id_private').attr('checked', false);
		  $('.lemma-notes-form #id_message_text').val(result['message_text']);
          $('.lemma-notes-form #id_topic').val(result['topic']);
          $('.lemma-notes-form #id_message_text').width($('#notes').width())
          
          HideProgressAnimation();	
        },
    
        error_callback: function(xhr, status, error) {
          HideProgressAnimation();
          error_alert(status + ': ' + error);
        },
        
        bad_data_callback: function(result) {
            if (result == 'already removed') {
                HideProgressAnimation();
                error_alert('Notatka została usunięta, odśwież widok.');
                return false;
            }
            else {
              HideProgressAnimation();
              return true;
            }
        },
      }); 
  	}
}

////////////////////////////////// lemma notes end /////////////////////////

function nkjp_lemma_example_form_submit() {
	if(checkIfSemChangedAndAlert()) {
		return false;
	}
	
    ShowProgressAnimation();
	this_form = $(this);
    form_data = this_form.serializeArray();
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'sentence' && elem.name != 'source' && elem.name != 'opinion'
       && elem.name != 'comment')
        return elem;
      else {
        if (elem.name == 'sentence')
          sentence = elem.value;
        else if (elem.name == 'source')
          source = elem.value;
        else if (elem.name == 'opinion')
          opinion = elem.value;
        else if (elem.name == 'comment')
          comment = elem.value;
      }
    });

	form_data.push({name: 'sentence', value: sentence});
    form_data.push({name: 'source', value: source});
    form_data.push({name: 'opinion', value: opinion});
    form_data.push({name: 'comment', value: comment});

    $.ajaxJSON({
      method: 'post',
      url: ajax_nkjp_example_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) {     
      var nkjp_example = new Nkjp_example(window.curr_lemma_example_id, '', '',
                            result['sentence'], result['source'], result['opinion'], result['comment'],
                            false);
      window.nkjp_lemma_examples.push(nkjp_example);
      window.curr_lemma_example_id--;
      
      window.frames_modif = window.frames_modif.slice(0, frames_modif_idx+1);     
      var lemma_version = new Lemma_Version(window.schemas, window.nkjp_examples, window.nkjp_lemma_examples);
      frames_modif.push(lemma_version);
      frames_modif_idx++; 
      
      draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_');
      $("tr.NkjpLemmaTableRow").click(function(){
        selectLemmaNkjpTr(this.id)});
      resetForm(this_form);
      change = true;	
      window.lemmaExNotSaved = false;
      HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'required fields not selected') {
        HideProgressAnimation();
        error_alert('Wszystkie pola poza komentarzem są wymagane.');
        return false;
      }
      else if (result == 'comment required') {
        HideProgressAnimation();
        error_alert('Wybrane źródło wymaga dodatkowych informacji.');
        return false;
      }   
      else
      {
        HideProgressAnimation();
        return true;
      }      
    },
  });
  return false;
}

/////////////////////// CZASOWNIKI PODOBNE ////////////////////////

function similar_lemmas_old_form_submit() {
    ShowProgressAnimation();
	this_form = $(this);
    form_data = this_form.serializeArray();
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'compatibility')
        return elem;
      else {
        if (elem.name == 'compatibility')
          compatibility = elem.value;
      }
    });

	form_data.push({name: 'compatibility', value: compatibility});
	form_data.push({name: 'lemma_id', value: window.lemma_id});

    $.ajaxJSON({
      method: 'post',
      url: ajax_similar_lemmas_old_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) {      
      grid.trigger("reloadGrid");
      HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'main lemma not selected') {
        HideProgressAnimation();
        error_alert('Zaznacz hasło w zakładce "Schematy".');
        return false;
      }
      else if (result == 'compatibility not selected') {
        HideProgressAnimation();
        error_alert('Nie określono skali zgodności.');
        return false;
      }
      else if (result == 'compatibility not digit') {
        HideProgressAnimation();
        error_alert('Podobieństwo należy określić jako liczbę od 1 do 100.');
        return false;
      }
      else if (result == 'wrong compatibility range') {
        HideProgressAnimation();
        error_alert('Podobieństwo może przyjąć wartości od 1% do 100%.');
        return false;
      }
      else if (result == 'similar lemmas not found') {
        HideProgressAnimation();
        error_alert('Nie odnaleziono haseł spełniających podane kryteria.');
        return false;
      }
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}

function similar_lemmas_new_form_submit() {
    ShowProgressAnimation();
	this_form = $(this);
    form_data = this_form.serializeArray();
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'compatibility' && elem.name != 'status')
        return elem;
      else {
        if (elem.name == 'compatibility')
          compatibility = elem.value;
        else if (elem.name == 'status')
          status = elem.value;
      }
    });

	form_data.push({name: 'compatibility', value: compatibility});
	form_data.push({name: 'status', value: status});
	form_data.push({name: 'lemma_id', value: window.lemma_id});

    $.ajaxJSON({
      method: 'post',
      url: ajax_similar_lemmas_new_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) {      
      grid.trigger("reloadGrid");
      HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'main lemma not selected') {
        HideProgressAnimation();
        error_alert('Zaznacz hasło w zakładce "Schematy".');
        return false;
      }
      else if (result == 'compatibility not selected') {
        HideProgressAnimation();
        error_alert('Nie określono skali zgodności.');
        return false;
      }
      else if (result == 'status not selected') {
        HideProgressAnimation();
        error_alert('Nie określono minimalnego statusu haseł.');
        return false;
      }
      else if (result == 'wrong compatibility range') {
        HideProgressAnimation();
        error_alert('Kompatybilność może przyjąć wartości od 1% do 100%.');
        return false;
      }
      else if (result == 'compatibility not digit') {
        HideProgressAnimation();
        error_alert('Kompatybilność należy określić jako liczbę od 1 do 100.');
        return false;
      }
      else if (result == 'similar lemmas not found') {
        HideProgressAnimation();
        error_alert('Nie odnaleziono haseł spełniających podane kryteria.');
        return false;
      }
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}

function similar_lemmas_show_synonyms() {
    ShowProgressAnimation();

    $.ajaxJSON({
      method: 'post',
      url: ajax_similar_lemmas_show_synonyms,
      data: {
        lemma_id: window.lemma_id
      },

    callback: function(result) {      
      grid.trigger("reloadGrid");
      HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'main lemma not selected') {
        HideProgressAnimation();
        error_alert('Zaznacz hasło w zakładce "Schematy".');
        return false;
      }
      else if (result == 'similar lemmas not found') {
        HideProgressAnimation();
        error_alert('Nie odnaleziono haseł podobnych znaczeniowo.');
        return false;
      }
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}

function related_lemmas_show() {
    ShowProgressAnimation();

    $.ajaxJSON({
      method: 'post',
      url: ajax_related_lemmas_show,
      data: {
        lemma_id: window.lemma_id
      },

    callback: function(result) {      
      grid.trigger("reloadGrid");
      HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'main lemma not selected') {
        HideProgressAnimation();
        error_alert('Zaznacz hasło w zakładce "Schematy".');
        return false;
      }
      else if (result == 'related lemmas not found') {
        HideProgressAnimation();
        error_alert('Nie odnaleziono powiązanych haseł.');
        return false;
      }
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}

function similar_lemmas_reset() {
          ShowProgressAnimation();
  	      $.ajaxJSON({
            method: 'post',
            url: ajax_similar_lemmas_reset,
            data: {
            },
            callback: function(result) {
              grid.trigger("reloadGrid");
              HideProgressAnimation();	
            },
            error_callback: function(xhr, status, error) {
              HideProgressAnimation();
              error_alert(status + ': ' + error);
            },
          });
      return false;
}

/////////////////////////////////////////////////////

function nkjp_example_form_submit() {
	if(checkIfSemChangedAndAlert()) {
		return false;
	}
    ShowProgressAnimation();
	if(window.selectedArgumentsIdNkjp.length == 0)
	{
	  HideProgressAnimation();
	  error_alert('Wybierz przynajmniej jeden typ frazy, aby dodać przykład.');
	  return  false;
	}
	if(!canModifyFrame(window.selectedFrameIdNkjp, window.schemas)) {
		HideProgressAnimation();
		error_alert('Nie można dodawać przykładów do wybranego schematu.');
		return  false;
	}
	this_form = $(this);
    form_data = this_form.serializeArray();
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'sentence' && elem.name != 'source' && elem.name != 'opinion'
       && elem.name != 'comment')
        return elem;
      else {
        if (elem.name == 'sentence')
          sentence = elem.value;
        else if (elem.name == 'source')
          source = elem.value;
        else if (elem.name == 'opinion')
          opinion = elem.value;
        else if (elem.name == 'comment')
          comment = elem.value;
      }
    });

	form_data.push({name: 'sentence', value: sentence});
    form_data.push({name: 'source', value: source});
    form_data.push({name: 'opinion', value: opinion});
    form_data.push({name: 'comment', value: comment});

    $.ajaxJSON({
      method: 'post',
      url: ajax_nkjp_example_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) { 
      if(window.selected_example_id != -1)
      {
        for(var i=0; i<window.nkjp_examples.length; i++)
        {
          example_tabId = 'nkjp_'+window.nkjp_examples[i].example_id
          if(example_tabId==window.selected_example_id)
          {
            window.nkjp_examples[i].frame_id = window.selectedFrameIdNkjp;
            window.nkjp_examples[i].arguments_ids = window.selectedArgumentsIdNkjp;
            window.nkjp_examples[i].sentence = result['sentence'];
            window.nkjp_examples[i].source = result['source'];
            window.nkjp_examples[i].opinion = result['opinion'];
            window.nkjp_examples[i].comment = result['comment'];
            window.nkjp_examples[i].example_id = window.curr_example_id;
            window.curr_example_id--;
            $('.new_frame_tabs').tabs('select', 2);
            break;
          }
        }
      }
      else if(window.selected_lemma_example_id != -1)
      {
        for(var i=0; i<window.nkjp_lemma_examples.length; i++)
        {
          example_tabId = 'nkjpLemma_'+window.nkjp_lemma_examples[i].example_id
          if(example_tabId==window.selected_lemma_example_id)
          {
            window.nkjp_lemma_examples.splice(i, 1);
            window.selected_lemma_example_id = -1;
            draw_nkjp_table(document.getElementById("lemma_example_show"), '', nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_')
            $("tr.NkjpLemmaTableRow").click(function(){
              selectLemmaNkjpTr(this.id)});
            break;
          }
        }
        var nkjp_example = new Nkjp_example(window.curr_example_id, window.selectedFrameIdNkjp, window.selectedArgumentsIdNkjp,
                            result['sentence'], result['source'], result['opinion'], result['comment'], false); 
        window.nkjp_examples.push(nkjp_example);
        window.curr_example_id--;
      }
      else
      {       
        var nkjp_example = new Nkjp_example(window.curr_example_id, window.selectedFrameIdNkjp, window.selectedArgumentsIdNkjp,
                            result['sentence'], result['source'], result['opinion'], result['comment'], false); 
        window.nkjp_examples.push(nkjp_example);
        window.curr_example_id--;
      }
      
      scrollPosition = $('#new-frame-tables').scrollTop();
      draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
      $('#new-frame-tables').scrollTop(scrollPosition);
      window.selectedArgumentsIdNkjp = new Array();
      window.selectedFrameIdNkjp = -1;
      
      frames_modif = frames_modif.slice(0, frames_modif_idx+1);     
      var lemma_version = new Lemma_Version(schemas, window.nkjp_examples, window.nkjp_lemma_examples);
      frames_modif.push(lemma_version);
      frames_modif_idx++;
      
      resetForm(this_form);
      change = true;
      HideProgressAnimation();	
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'required fields not selected') {
        HideProgressAnimation();
        error_alert('Wszystkie pola poza komentarzem są wymagane.');
        return false;
      }
      else if (result == 'comment required') {
        HideProgressAnimation();
        error_alert('Wybrane źródło wymaga dodatkowych informacji.');
        return false;
      }  
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}

function semantic_example_form_submit() {
    ShowProgressAnimation();
	if(window.selectedArgumentsIdNkjp.length == 0)
	{
	  HideProgressAnimation();
	  error_alert('Wybierz przynajmniej jeden typ frazy, aby dodać przykład.');
	  return false;
	}
	this_form = $(this);
    form_data = this_form.serializeArray();
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'sentence' && elem.name != 'source' && elem.name != 'opinion'
       && elem.name != 'comment')
        return elem;
      else {
        if (elem.name == 'sentence')
          sentence = elem.value;
        else if (elem.name == 'source')
          source = elem.value;
        else if (elem.name == 'opinion')
          opinion = elem.value;
        else if (elem.name == 'comment')
          comment = elem.value;
      }
    });
    
    var convertedArgSelections = convertArgumentSelections(window.selectedFrameIdNkjp, 
    		window.selectedArgumentsIdNkjp)
	form_data.push({name: 'sentence', value: sentence});
    form_data.push({name: 'source', value: source});
    form_data.push({name: 'opinion', value: opinion});
    form_data.push({name: 'comment', value: comment});
    form_data.push({name: 'lemma', value: window.lemma_id});
    form_data.push({name: 'frame', value: parseId(window.selectedFrameIdNkjp)['frame_id']});
    form_data.push({name: 'arg_selections', value: JSON.stringify(convertedArgSelections)});

    $.ajaxJSON({
      method: 'post',
      url: ajax_semantic_example_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(example) {       
      var nkjp_example = new Nkjp_example(example['id'], window.selectedFrameIdNkjp, window.selectedArgumentsIdNkjp,
    		  example['sentence'], example['source'], example['opinion'], example['comment'], true); 
      window.nkjp_examples.push(nkjp_example);
      
      scrollPosition = $('#new-frame-tables').scrollTop();
      draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
      $('#new-frame-tables').scrollTop(scrollPosition);
      window.selectedArgumentsIdNkjp = new Array();
      window.selectedFrameIdNkjp = -1;
      
      resetForm(this_form);
      HideProgressAnimation();	
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'required fields not selected') {
        HideProgressAnimation();
        error_alert('Wszystkie pola poza komentarzem są wymagane.');
        return false;
      }
      else if (result == 'comment required') {
        HideProgressAnimation();
        error_alert('Wybrane źródło wymaga dodatkowych informacji.');
        return false;
      }  
      else if (result == 'old lemma') {
          HideProgressAnimation();
          error_alert('Odśwież hasło, widoczna wersja nie jest aktualna.');
          return false;
        } 
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
}

function convertArgumentSelections(frameTabId, argumentSelections) {
    var argument_selections = new Array();
    
    // zbieranie listy pozycji z ktorych wybrano argumenty
    for(var j=0; j<argumentSelections.length; j++)
    {       
      var ids = parseId(argumentSelections[j]);
      pos_id = argumentSelections[j].replace('arg_'+ids['arg_id']+'_','');
      positionInstance = getElementInstance(pos_id, schemas);
      position = positionInstance['element'];  
      newPosition = true;
         
      for(var k=0; k<argument_selections.length; k++)
      {
        if(argument_selections[k].position == position)
        {
          newPosition = false;
          break;
        }
      }
      if(newPosition)
        argument_selections.push(new Nkjp_ArgSelection(position, new Array()));
    }
       
    // przyporzadkowanie argumentow pozycjom 
    for(var j=0; j<argumentSelections.length; j++)
    {         
	  for(var k=0; k<argument_selections.length; k++)
	  {
	    if(argumentSelections[j].startsWith(frameTabId+'pos_'+argument_selections[k].position.id+'_'))
	    {
	      var argInstance = getElementInstance(argumentSelections[j], schemas);
	      argument_selections[k].arguments.push(argInstance['element']);
	    }
	  }         
    }
    return argument_selections;
}

 function serializedObjToObj(serialized_frames)
 {
    var serFrames = eval('(' + serialized_frames + ')');
    return serFrames;
 }
 
 function serializedNkjpToObj(serialized_nkjp_examples)
 {
    var serNkjpExamples = eval('(' + serialized_nkjp_examples + ')'); 
    return serNkjpExamples;
 }
 
///////////////////////////////////////////////////////////////////////////////////////////////
  function getMatchingElements(parent, id)
  {
    var elements = getDescendantsNodes(parent);
    var matching_elements = new Array();
    
  // declare our regex
    var re = new RegExp("^("+id+").*");
  // loop through the form elements
    for(i = 0; i < elements.length; i++)
    {
  // execute our regular expression against each element id
      var m = re.test(elements[i].id);
      if (m && id) 
        matching_elements.push(elements[i]);
    }
    return matching_elements;
  }
  
function removeFrameElement(id, schemas)
{
    if(id != -1 && id.startsWith('frame'))
    { 
      var ids = parseId(id);
      var frame_id = ids['frame_id'];
      var pos_id = ids['pos_id'];
      var arg_id = ids['arg_id'];
    
      for(var i=0; i<schemas.length; i++)
      {
        if(schemas[i].id == frame_id && pos_id)
        {
          for(var j=0; j<schemas[i].positions.length; j++)
          {
            if(schemas[i].positions[j].id == pos_id && arg_id)
            {
          	  for(var k=0; k<schemas[i].positions[j].arguments.length; k++)
          	  {
          	    if(schemas[i].positions[j].arguments[k].id == arg_id)
          	    {
          	      schemas[i].positions[j].arguments.splice(k, 1);
          	      if(schemas[i].positions[j].arguments.length == 0)
          	      {
          	        break;
          	      }
          	    }
          	  }
            }
            else if(schemas[i].positions[j].id == pos_id)
              schemas[i].positions.splice(j, 1);
          }
        }
        else if(schemas[i].id == frame_id)
        {
        	schemas.splice(i, 1); // takie usuwanie nie zostawia dziury w tabeli  
        }
      }
      selected_id = -1;
    }
    return schemas;
}

function addFramePosition(id, schemas, position)
{    
    if(id!=-1 && id.startsWith('frame'))
    {
      var ids = parseId(id);
      var frame_id = ids['frame_id'];
      var pos_id = ids['pos_id'];
      var arg_id = ids['arg_id'];
      
      for(var i=0; i<schemas.length; i++)
      {
        if(schemas[i].id == frame_id && pos_id)
        {
		  return schemas;
        }
        else if(schemas[i].id == frame_id) // dodawanie pozycji do schematu
        {
        // nowa pozycja
        	schemas[i].positions.push(position); 
        }
      }
    }
    return schemas;
}

function removeDescElements(parent)
{
  if(parent.hasChildNodes())
  {
    while (parent.childNodes.length >= 1)
      parent.removeChild(parent.firstChild);       
  }
}

function refresh_example_propositions()
{
	frame_json = '';
	argument_ids = '';
	if (window.selectedFrameIdNkjp != -1) {
		frame_id = window.selectedFrameIdNkjp.split('_')[1];
		frame = ''
		for(var i=0; i<window.schemas.length; i++)
		{
			if(window.schemas[i].id == frame_id)
			{
				frame = window.schemas[i];
				break;
			}
		}
		frame_json = encodeURIComponent(JSON.stringify(frame));
		argument_ids = JSON.stringify(window.selectedArgumentsIdNkjp);
	}
	$('#skladnica-example-propositions-select').empty();
	$('#skladnica-example-propositions-select').load(ajax_skladnica_example_propositions, 
			'frame='+frame_json+'&argument_ids='+argument_ids+'&lemma_id='+window.lemma_id);
	$('#xcp-example-propositions-select').empty();
	$('#xcp-example-propositions-select').load(ajax_xcp_example_propositions, 
			'frame='+frame_json+'&argument_ids='+argument_ids+'&lemma_id='+window.lemma_id);
}

function selectTd(id)
{     
  	var parent = document.getElementById("new-frame-tables");
  	var recent_sel_elements = new Array();

  	if(window.copy_elem_id != -1)
  	{
  	   var copied_elements = getMatchingElements(parent, window.copy_elem_id);
	   for(var i=0; i<copied_elements.length; i++)
         $(copied_elements[i]).css("background-color", "");
       window.copy_elem_id = -1;
  	}
  	
   if(window.activeNewFramePanel == 'frames_modif')
   {
  	  if(selected_id != -1)
  	  {
  	    recent_sel_elements = getMatchingElements(parent, selected_id);
  	    for(var i=0; i<recent_sel_elements.length; i++)
		  $(recent_sel_elements[i]).css("background-color", "");
  	  }
  	
  	  if(selected_id == id)
  	    selected_id = -1;
  	  else
  	  {
  	    selected_id = id;
  	    var matching_elements = getMatchingElements(parent, id);
	    for(var i=0; i<matching_elements.length; i++)
          $(matching_elements[i]).css("background-color", "LightSteelBlue");
  	  }
  	}
  	else if(window.activeNewFramePanel == 'show_nkjp_example')
  	{
  	  elementInstance = getElementInstance(id, schemas);
  	  if(elementInstance['type'] == 'frame')
  	  {
  	    window.selected_example_id = -1;
  	    if(id != window.selectedFrameIdNkjp)
  	    {
  	      unselectTd(window.selectedFrameIdNkjp);
  	      $("button#confirm_example").css("visibility","hidden"); 
  	    }
  	      
  	    window.selectedFrameIdNkjp = id;
  	    var parent = document.getElementById("new-frame-tables");
  	    var matching_elements = getMatchingElements(parent, id);
	    for(var i=0; i<matching_elements.length; i++)
          $(matching_elements[i]).css("background-color", "LightSteelBlue");
          
        var table_container = document.getElementById("show_nkjp_table");
        draw_nkjp_table(table_container, id, nkjp_examples, 'NkjpTableRow', 'nkjp_');
        $("tr.NkjpTableRow").click(function(){
          selectNkjpTr(this.id)});
  	  }
  	}  	
  	else if(window.activeNewFramePanel == 'add_nkjp_example')
  	{
  	  elementInstance = getElementInstance(id, schemas);
  	  if(elementInstance['type'] == 'argument')
  	  {
  	    if(selectedFrameIdNkjp == -1)
  	    {
  	      selectedFrameIdNkjp = 'frame_'+parseId(id)['frame_id']+'_';
  	    }
  	    else
  	    {
  	    // jesli chcemy zaznaczyc argument w innej ramce
  	      if(!id.startsWith(selectedFrameIdNkjp))
  	      {
  	        unselectTd(selectedFrameIdNkjp)
  	        window.selectedArgumentsIdNkjp = new Array();
  	        selectedFrameIdNkjp = 'frame_'+parseId(id)['frame_id']+'_';
  	      }
  	      argElem = document.getElementById(id);
  	      
  	      alreadySelected = false;
  	      for(var i=0; i<window.selectedArgumentsIdNkjp.length; i++)
  	      {
  	        if(window.selectedArgumentsIdNkjp[i]==id)
  	        {
  	          window.selectedArgumentsIdNkjp.splice(i, 1);
  	          $(argElem).css("background-color", "");
  	          alreadySelected = true;
  	          break;
  	        }
  	      }
  	      if(!alreadySelected)
  	      {
  	        $(argElem).css("background-color", "LightSteelBlue");
  	        window.selectedArgumentsIdNkjp.push(id);
  	      }
  	    }
  	    refresh_example_propositions();
  	  }
  	}
}

function unselectTd(id)
{ 
  	var parent = document.getElementById("new-frame-tables");
  	var recent_sel_elements = getMatchingElements(parent, id);
  	for(var i=0; i<recent_sel_elements.length; i++)
	  $(recent_sel_elements[i]).css("background-color", "");
}

function parseId(id)
{
    var pattern = /(frame_)(-?\d+)_(pos_)?(-?\d*)_?(arg_)?(-?\d*)_?/
    var match = id.match(pattern);
    return {'frame_id': match[2],
            'pos_id': match[4],
            'arg_id': match[6]}
}
  
function getElementInstance(id, schemas)
{
    if(id != -1 && id.startsWith('frame'))
    {
      var ids = parseId(id);
      var frame_id = ids['frame_id'];
      var pos_id = ids['pos_id'];
      var arg_id = ids['arg_id'];
    
      for(var i=0; i<schemas.length; i++)
      {
        if(schemas[i].id == frame_id && pos_id)
        {
          for(var j=0; j<schemas[i].positions.length; j++)
          {
            if(schemas[i].positions[j].id == pos_id && arg_id)
            {
          	  for(var k=0; k<schemas[i].positions[j].arguments.length; k++)
          	  {
          	    if(schemas[i].positions[j].arguments[k].id == arg_id)
          	    {
          	      return {'element': schemas[i].positions[j].arguments[k],
          	               'type': 'argument'};
          	    }
          	  }
            }
            else if(schemas[i].positions[j].id == pos_id)
            { // position
              return {'element': schemas[i].positions[j],
          	           'type': 'position'};
            }
          }
        }
        else if(schemas[i].id == frame_id)
        { // frame
          return {'element': schemas[i],
          	       'type': 'frame'};
        }
      }
      selected_id=-1;
    }
    return {};
}

/////////////////////// filtering frames /////////////////////

function escape_regex(str)
{
	return str.split('(').join('\\(').
			split(')').join('\\)').
			split('[').join('\\[').
			split(']').join('\\]').
			split('{').join('\\{').
			split('}').join('\\}')
}

function draw_filtered_frames(schemas, parent_id, table_id, filter_id, nkjp_examples, table_class, lemma_entry)
{
  var parent = document.getElementById(parent_id);
  filtered_frames = schemas;
  if(filter_id)
    filtered_frames = filter_frames(schemas, filter_id);
  draw_frames(filtered_frames, parent, table_id, nkjp_examples, table_class, lemma_entry);
}

////////////////////////////////////////////////////

function validate_and_change_status()
{
  if(window.change || semanticsChanged()) {
	  error_alert('Przed zmianą statusu hasło musi zostać zapisane.');
	  return false;
  }

  status_id = this.id;
  $.ajaxJSON({
    method: 'post',
    url: ajax_status_need_validation,
    data: {
      status_id: status_id,
      lemma_id: lemma_id
    },
    callback: function(result) {
      if(result['need_validation']) {
    	  if(semanticsValid(status_id)) {
    		  validate_new_frames(status_id, true);
    	  }
      }
      else {
    	  lemma_status_change(status_id);
      }
    },
    error_callback: function(xhr, status, error) {
      error_alert(status + ': ' + error);
    },
  });
  return false;
}


function lemma_status_change(status_id) {
  if(window.change || semanticsChanged()) {
	error_alert('Przed zmianą statusu hasło musi zostać zapisane.');
	return false;
  }
  if(!confirm("Czy jesteś pewien, że chcesz zmienić status hasła?")){
	return false;
  }
  if(notesNotSaved && !confirm("Czy jesteś pewien, że chcesz zmienić status hasła? Utracone zostaną dane wpisane w formularzu tworzenia notatek.")){
    return false;
  }
  if(lemmaExNotSaved && !confirm("Czy jesteś pewien, że chcesz zmienić status hasła? Utracone zostaną dane zapisane w formularzu tworzenia przykładów niedowiązanych.")){
	return false;
  }
  ShowProgressAnimation();

  $.ajaxJSON({
    method: 'post',
    url: ajax_lemma_status_change,
    data: {
      status_id: status_id, 
      lemma_id: lemma_id    // obecnie ustawione haslo
    },

    callback: function(result) {
      if(result['changed'])
      {
        if (result['new_status_type'] == 'ready' && result['next_status'])
        {
          topic = 'Hasło gotowe';
          $('#ready-note-dialog').load(ajax_lemma_note_form, "topic="+topic, function() {
        	  $('#ready-note-dialog').dialog({title: "Dodawanie uwag na temat gotowości hasła:"}).dialog('open');
          })
        }
        else if(result['new_status_type'] == 'checked' && result['next_status'])
        {
          topic = 'Hasło zatwierdzone';
          $('#ready-note-dialog').load(ajax_lemma_note_form, "topic="+topic, function() {
        	  $('#ready-note-dialog').dialog({title: "Dodawanie uwag na temat zatwierdzenia hasła:"}).dialog('open');
          })
        }
        else if (result['new_status_type'] == 'ready_f' && result['next_status'])
        {
          topic = 'Hasło gotowe frazeologicznie';
          $('#ready-note-dialog').load(ajax_lemma_note_form, "topic="+topic, function() {
        	  $('#ready-note-dialog').dialog({title: "Dodawanie uwag na temat gotowości hasła:"}).dialog('open');
          })
        }
        else if(result['new_status_type'] == 'checked_f' && result['next_status'])
        {
          topic = 'Hasło zatwierdzone frazeologicznie';
          $('#ready-note-dialog').load(ajax_lemma_note_form, "topic="+topic, function() {
        	  $('#ready-note-dialog').dialog({title: "Dodawanie uwag na temat zatwierdzenia hasła:"}).dialog('open');
          })
        }
        else if (result['new_status_type'] == 'ready_s' && result['next_status'])
        {
          topic = 'Hasło gotowe semantycznie';
          $('#ready-note-dialog').load(ajax_lemma_note_form, "topic="+topic, function() {
        	  $('#ready-note-dialog').dialog({title: "Dodawanie uwag na temat gotowości hasła:"}).dialog('open');
          })
        }
        else if(result['new_status_type'] == 'checked_s' && result['next_status'])
        {
          topic = 'Hasło zatwierdzone semantycznie';
          $('#ready-note-dialog').load(ajax_lemma_note_form, "topic="+topic, function() {
        	  $('#ready-note-dialog').dialog({title: "Dodawanie uwag na temat zatwierdzenia hasła:"}).dialog('open');
          })
        }
        
          window.lastSelectedId = result['lemma_id'];
          grid.trigger("reloadGrid");

          data = grid.jqGrid('getGridParam', 'postData');
          data['mask'] = '';
          data['id'] = result['lemma_id'];

          $.get(ajax_location, data, function(resp) {
            var selectedRow = resp['selected_id'] + "";
            var rowIndex = resp['rowIndex'];
            var recordsCount = resp['records'];
            if (recordsCount > 0){
              grid.jqGrid('scrollToRow', rowIndex, recordsCount);
            }
          });
        load_content(result['lemma_id']);
        HideProgressAnimation();
      }
      else 
      {
    	HideProgressAnimation();
    	if(result['message'])
    	    alert(result['message']);
      }
    },
    bad_data_callback: function(result) {
        if(result == 'old version') {
      	  HideProgressAnimation();
          error_alert('Nie można zmienić statusu nieaktualnej wersji hasła.');
          return false;
        }
        else if(result == 'user logged out') {
          HideProgressAnimation();
          alertUserNotAuthenticated();
          return false;
        }
        else if(result == 'already changed') {
            HideProgressAnimation();
            error_alert('Status już został zmieniony.');
            return false;
        }
        else if(result == 'wrong change') {
            HideProgressAnimation();
            error_alert('Nie można dokonać zmiany statusu, najpewniej został on już zmieniony.');
            return false;
        }
        else {
          HideProgressAnimation();
          return true;
        }        
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
  });
  return false;
}

function restore_lemma() {
    ShowProgressAnimation();
    change = false;
  
    if(selected_ctrl_row_id != -1)
	  {
	      change_id = selected_ctrl_row_id.replace('change_', '');
	      $.ajaxJSON({
          method: 'post',
          url: ajax_restore_lemma,
          data: {
            change_id: change_id, // haslo przechowywane w systemie kontroli zmian
            lemma_id: lemma_id    // obecnie ustawione haslo
          },
          callback: function(result) {
            window.lastSelectedId = result['id'];
            grid.trigger("reloadGrid");

            data = grid.jqGrid('getGridParam', 'postData');
            data['mask'] = '';
            data['id'] = result['id'];
            window.lemma_id = result['id'];

            $.get(ajax_location, data, function(resp) {
              var selectedRow = resp['selected_id'] + "";
              var rowIndex = resp['rowIndex'];
              var recordsCount = resp['records'];
              if (recordsCount > 0 && !resp['lemma_nfound']){
                grid.jqGrid('scrollToRow', rowIndex, recordsCount);
                load_content(window.lemma_id);
              }
              else if(resp['lemma_nfound'])
              {
                load_content(window.lemma_id);
              }
            });
            HideProgressAnimation();	
            alert('Przywracanie hasła zakończono pomyślnie.');	
          },
          bad_data_callback: function(result) {
              if(result == 'old version') {
            	HideProgressAnimation();
                error_alert('Nie można przywrócić hasła, wyświetlana w interfejsie wersja nie jest aktualna.');
                return false;
              }
              else {
                HideProgressAnimation();
                return true;
              }        
          },
          error_callback: function(xhr, status, error) {
            HideProgressAnimation();
            error_alert(status + ': ' + error);
          },
        });
	  }
    return false;
}

/////////////////////////////////////////

  function elements_need_conversion(from_lemma_id, to_lemma_id) {
	  need_conversion = false;
	  can_be_converted = false;
	  jQuery.ajax({
		type: 'get',
	    url: ajax_need_conversion,
	    data: {from_lemma_id: from_lemma_id,
	    	   to_lemma_id: to_lemma_id},
	    success: function(result) {
	    	need_conversion = result['need_conversion'];
	    	can_be_converted = result['can_be_converted'];
	    },
	    async:false
	  });
	  return [can_be_converted, need_conversion];
  }

  function openConvertFrameForm(from_lemma_id, to_lemma_id, frame_id) {
	  $('#add-table-elem-dialog').load(ajax_frame_conversion_form, {
		  'from_lemma_id': from_lemma_id,
		  'to_lemma_id': to_lemma_id,
		  'frame_id': frame_id})
		  .dialog( 'option', 'title', 'Konwersja schematu:' )
		  .dialog('open');
  }
  
  function convertFrameFormSubmit() {
    ShowProgressAnimation();
	this_form = $(this);	
    form_data = this_form.serializeArray();
  
    form_data = $.map(form_data, function(elem)
    { 
      if (elem.name != 'frame_versions')
        return elem;
      else {
        if (elem.name == 'frame_versions')
          frame_version = elem.value;
      }
    });
    
    form_data.push({name: 'frame_version', value: frame_version});
    form_data.push({name: 'lemma_id', value: window.lemma_id});

    $.ajaxJSON({
      method: 'post',
      url: ajax_frame_conversion_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) { 
	    new_frame = serializedObjToObj(result['frame']);
	    new_frame.id = new_elem_id;
        new_elem_id--;
	    window.schemas.push(new_frame);   
	    new_frames_make_change();
	    goToFrame('frame_'+new_frame.id+'_', document.getElementById('new-frame-tables'));
	    $('#add-table-elem-dialog').dialog('close');
        HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'select frame version') {
        HideProgressAnimation();
        error_alert('Wybierz wersję schematu.');
        return false;
      } 
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
  }

  function pasteFrameElement(id, copy_elem, schemas)
  {
    var target_elem = ''
    if(id != -1)
      target_elem = getElementInstance(id, schemas);  
    var to_copy_elem = copy_elem; 
    elements_conversion = elements_need_conversion(elem_in_bucket['lemma_id'], window.lemma_id);
    can_be_converted = elements_conversion[0]
    need_conversion = elements_conversion[1]
    
    // kopiowanie schematu do hasla
    if(!target_elem && 
        to_copy_elem['type'] == 'frame')
    {
      var frame = $.evalJSON($.toJSON(to_copy_elem['element']));
      clearSemanticConnections(to_copy_elem['type'], frame);
      // kopiowanie schematu z podgladu (moze wymagac konwersji)
      if(elem_in_bucket['lemma_id'] && 
         need_conversion && can_be_converted &&
    	 elem_in_bucket['lemma_id'] != window.lemma_id) {
    	  openConvertFrameForm(elem_in_bucket['lemma_id'], window.lemma_id, frame.id)
      }
      else if(!need_conversion) {
    	  if(frame.id > 0) {
    		  var frame_chars = get_compatible_schema_chars(window.lemma_id, frame.id);
        	  frame.characteristics = frame_chars;
    	  }
		  frame.id = new_elem_id;
          new_elem_id--;
          window.schemas.push(frame);
          new_frames_make_change();
      }
    }
    else
    {
     // kopiowanie argumentu do pozycji
      if(target_elem['type'] == 'position' && 
         to_copy_elem['type'] == 'argument' && !need_conversion)
      {
        var argument = $.evalJSON($.toJSON(to_copy_elem['element']));
        clearSemanticConnections(to_copy_elem['type'], argument);
        argument.id = new_elem_id;
        new_elem_id--;
        target_elem['element'].arguments.push(argument);
        new_frames_make_change();
      }
    // kopiowanie pozycji do schematu
      else if(target_elem['type'] == 'frame' && 
          to_copy_elem['type'] == 'position' && !need_conversion)
      {
        var position = $.evalJSON($.toJSON(to_copy_elem['element']));
        clearSemanticConnections(to_copy_elem['type'], position);
        position.id = new_elem_id;
        new_elem_id--;
        target_elem['element'].positions.push(position);
        new_frames_make_change();
      }
    } 
  }
  
  function get_compatible_schema_chars(lemma_id, schema_id) {
	  var schema_chars = [];
	  jQuery.ajax({
		type: 'get',
	    url: ajax_get_compatible_schema_chars,
	    data: {lemma_id: lemma_id,
	    	   schema_id: schema_id},
	    success: function(result) {
	    	schema_chars = result['schema_chars'];
	    },
	    async: false
	  });
	  return schema_chars;
  }
  
  function new_frames_make_change()
  {
      scrollPosition = $('#new-frame-tables').scrollTop();
      draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
      $('#new-frame-tables').scrollTop(scrollPosition);
        
      frames_modif = frames_modif.slice(0, frames_modif_idx+1);
      var lemma_version = new Lemma_Version(schemas, window.nkjp_examples, window.nkjp_lemma_examples);
      frames_modif.push(lemma_version);
      frames_modif_idx++;
      change = true;
  }
  
  function getFrameInstance(id, schemas) {
    if(id != -1 && id.startsWith('frame')) {
      var ids = parseId(id);
      var frame_id = ids['frame_id'];
      for(var i=0; i<schemas.length; i++) {
        if(schemas[i].id == frame_id) { // frame
          return {'element': schemas[i],
          	       'type': 'frame'};
        }
      }
    }
    return {};
  }
  
  function arg_can_be_lexicalized(argument_id) {
	  can_be_lexicalized = false;
	  jQuery.ajax({
		type: 'get',
	    url: ajax_arg_can_be_lexicalized,
	    data: {argument_id: argument_id},
	    success: function(result) {
	    	can_be_lexicalized = result['can_be_lexicalized'];
	    },
	    async:false
	  });
	  return can_be_lexicalized;
  }
  
  function user_has_perm(perm) {
	  has_perm = false;
	  jQuery.ajax({
		type: 'get',
	    url: ajax_user_has_perm,
	    data: {perm: perm},
	    success: function(result) {
	      has_perm = result['has_perm'];
	    },
	    async:false
	  });
	  return has_perm;
  }
  
  function canModifyFrame(id, schemas) {
	  canModify = false;
	  frameInstance = getFrameInstance(id, schemas);
	  if((user_has_perm('dictionary.add_syntactic_frames')) ||
		 (user_has_perm('dictionary.add_phraseologic_frames') && frameInstance['element'].is_phraseologic)) {
		  canModify = true;
	  }
	  return canModify;  
  }
  
  function removeElement() {
	if(window.selected_id != -1) {
		var assignedExamples = [];
		if(canModifyFrame(window.selected_id, window.schemas) &&
		   !checkIfSemChangedAndAlert()) {
			assignedExamples = gotAssignedExample(nkjp_examples, selected_id, true);
			if(assignedExamples.length == 0) {
				schemas = removeFrameElement(selected_id, schemas);	
			    new_frames_make_change();
			}
			else {
				$('#pinned-examples-dialog').data('assignedExamples', assignedExamples).dialog('open');
			}
		}
	} 
  }
  
  function addElement() {
	  if(!checkIfSemChangedAndAlert() && 
		 (window.selected_id == -1 || canModifyFrame(window.selected_id, window.schemas))) {
		  window.schemas = addFrameElementDialog(window.selected_id, window.schemas);
	  }
  }
  
  function copyElement()
  {
     if(window.activeLemmaPanel == 'preview_lemma' && 
    	window.prev_selected_id != -1 &&
    	canModifyFrame(window.prev_selected_id, prev_frames))
    	//user_has_perm('dictionary.add_syntactic_frames'))
     {
       elem_in_bucket = getElementInstance(window.prev_selected_id, prev_frames);
       elem_in_bucket['lemma_id'] = window.prev_lemma_id; 
       unselectPrevTd(window.prev_selected_id);
       window.prev_selected_id = -1;
     }
     else if(window.activeLemmaPanel == 'new_frames' &&
    		  window.selected_id != -1 &&
    		  canModifyFrame(window.selected_id, window.schemas))
     {
       elem_in_bucket = getElementInstance(window.selected_id, schemas);
       elem_in_bucket['lemma_id'] = window.lemma_id;
       unselectTd(window.selected_id);
       window.selected_id = -1;
     }   
  }

//////////////////////////////////////////////////////
  function areNewPreviewEntriesRelated() {
	    $.ajaxJSON({
	      method: 'get',
	      url: ajax_are_new_preview_entries_related,
	      data: {
	    	  lemma_id: window.lemma_id,
		      preview_lemma_id: window.prev_lemma_id
	      },

	    callback: function(result) {      
	      if(result['related']) {
	          $("button#prev_disrelate_entries").css("visibility","visible");
	      }  	
	      else {
	    	  $("button#prev_disrelate_entries").css("visibility","hidden");
	      }
	    },
	    error_callback: function(xhr, status, error) {
	      error_alert(status + ': ' + error);
	    },
	    bad_data_callback: function(result) {
	      return true;
	    },
	  });
	  return false;
  }
  
  function relateEntries()
  {
    if (confirm('Czy jesteś pewien, że chcesz powiazać hasło z zakładki "Schematy" z hasłem wybranym w zakładce "Podgląd hasła"?')) {
	    ShowProgressAnimation();
	    $.ajaxJSON({
	      method: 'post',
	      url: ajax_relate_entries,
	      data: {
	        lemma_id: window.lemma_id,
	        preview_lemma_id: window.prev_lemma_id
	      },

	    callback: function(result) {    
	      $("button#prev_disrelate_entries").css("visibility", "visible");
	      HideProgressAnimation();	   
	    },
	    error_callback: function(xhr, status, error) {
	      HideProgressAnimation();
	      error_alert(status + ': ' + error);
	    },
	    bad_data_callback: function(result) {
	      if (result == 'lemma not selected') {
	        HideProgressAnimation();
	        error_alert('Nie zaznaczono hasła w zakładce "Schematy" lub "Podglądzie hasła".');
	        return false;
	      }
	      else if (result == 'same lemma id') {
	        HideProgressAnimation();
	        error_alert('Nie można powiązać hasła z samym sobą.');
	        return false;
	      }
	      else if (result == 'same part of speech') {
		        HideProgressAnimation();
		        error_alert('Nie można powiązywać haseł reprezentujących tę samą część mowy.');
		        return false;
		      }
	      else
	      {
	        HideProgressAnimation();
	        return true;
	      }      
	    },
	  });
	  return false;
	}
  }

  function disrelateEntries()
  {
    if (confirm('Czy jesteś pewien, że chcesz anulować relację hasła wybranego w zakładce "Schematy" z hasłem wybranym w zakładce "Podgląd hasła"?')) {
	    ShowProgressAnimation();
	    $.ajaxJSON({
	      method: 'post',
	      url: ajax_disrelate_entries,
	      data: {
	        lemma_id: window.lemma_id,
	        preview_lemma_id: window.prev_lemma_id
	      },
	    callback: function(result) {   
	      $("button#prev_disrelate_entries").css("visibility", "hidden");
	      HideProgressAnimation();	
	    },
	    error_callback: function(xhr, status, error) {
	      HideProgressAnimation();
	      error_alert(status + ': ' + error);
	    },
	    bad_data_callback: function(result) {
	      HideProgressAnimation();
	      return true;     
	    },
	  });
	  return false;
	}
  }
  
///////////////////////////////////////////////////////
    
  function pasteElement()
  {
	 if(window.elem_in_bucket && !checkIfSemChangedAndAlert() &&
		(window.selected_id == -1 || 
		 canModifyFrame(window.selected_id, window.schemas))) {
		 pasteFrameElement(selected_id, elem_in_bucket, schemas);
	 }
  }
  
  function cutElement()
  {
    if(selected_id != -1) 
    {
      elem_in_bucket = getElementInstance(selected_id, schemas);
      if(window.activeLemmaPanel == 'preview_lemma') {
    	  elem_in_bucket['lemma_id'] = window.prev_lemma_id;
      }
      else {
    	  elem_in_bucket['lemma_id'] = window.lemma_id;
      }
      var elem_to_remove = elem_in_bucket['element'];
      var elem_to_copy = $.evalJSON($.toJSON(elem_in_bucket['element']));
      elem_in_bucket['element'] = elem_to_copy;
    
    // remove
      removeElement();
    }
  }
  
  function duplicateElement()
  {
    if(window.selected_id != -1 && 
       canModifyFrame(window.selected_id, window.schemas) &&
       !checkIfSemChangedAndAlert()) 
    {
      elem_in_bucket = getElementInstance(selected_id, schemas);
      
      var parent_elem = getParentInstance(selected_id, schemas);
      var duplicate = $.evalJSON($.toJSON(elem_in_bucket['element']));
      clearSemanticConnections(elem_in_bucket['type'], duplicate);
      duplicate.id = new_elem_id;
      new_elem_id--;
      
      if(parent_elem['type']=='lemma')
    	  schemas.push(duplicate);
      else if(parent_elem['type']=='frame')
        parent_elem['element'].positions.push(duplicate);
      else if(parent_elem['type']=='position')
        parent_elem['element'].arguments.push(duplicate);
      
      scrollPosition = $('#new-frame-tables').scrollTop();
      draw_filtered_frames(schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
      if (elem_in_bucket['type'] == 'frame') {
    	goToFrame('frame_'+duplicate.id+'_', document.getElementById('new-frame-tables'));  
      }
      else {
    	$('#new-frame-tables').scrollTop(scrollPosition);
      }  
      frames_modif = frames_modif.slice(0, frames_modif_idx+1);
      var lemma_version = new Lemma_Version(schemas, window.nkjp_examples, window.nkjp_lemma_examples);
      frames_modif.push(lemma_version);
      frames_modif_idx++;
      selected_id = -1;
      window.elem_in_bucket = '';
      change = true;
    }
  }
  
  function addPhraseologicFrame()
  {
    if(selected_id != -1) {
      var schema = getElementInstance(selected_id, schemas);
      var parent_elem = getParentInstance(selected_id, schemas);
      
      if(parent_elem['type']=='lemma' 
    	  && !schema['element'].is_phraseologic
    	  && user_has_perm('dictionary.add_phraseologic_frames')) {
        var duplicate = $.evalJSON($.toJSON(schema['element']));
        clearSemanticConnections(schema['type'], duplicate);
        duplicate.id = new_elem_id;
        new_elem_id--;
      	duplicate.is_phraseologic = true;
      	schemas.push(duplicate);

        draw_filtered_frames(schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
        goToFrame('frame_'+duplicate.id+'_', document.getElementById('new-frame-tables'));
        
        frames_modif = frames_modif.slice(0, frames_modif_idx+1);
        var lemma_version = new Lemma_Version(schemas, window.nkjp_examples, window.nkjp_lemma_examples);
        frames_modif.push(lemma_version);
        frames_modif_idx++;
        selected_id = -1;
        change = true;
      }
    }
    else if(phraseologicPropositionsExists(window.lemma_id)) {
        form_data = new Array();
      	form_data.push({name: 'opinion', value: ''});
      	form_data.push({name: 'characteristics', value: ['_', '_']}); 
      	form_data.push({name: 'edit', value: false});
      	form_data.push({name: 'lemma_id', value: window.lemma_id});
        data = JSON.stringify(form_data);
        $('#add-table-elem-dialog').load(ajax_frame_form, {'form_data': data,
        												   'phraseologic': true}, function(){
	    														$('#new-frames-tabs').hide();
	    													 })
        												     .dialog( 'option', 'title', 'Dodawanie schematów frazeologicznych:' )
        													 .dialog('option', 'width', 500)
        												     .dialog('open');
    }
  }
  
  function openAssignPhraseologicFrameDialog() {
    if(selected_id != -1) {
        var frame = getElementInstance(selected_id, schemas);
        var parent_elem = getParentInstance(selected_id, schemas);
        
        if(parent_elem['type']=='lemma' 
      	  && frame['element'].is_phraseologic
      	  && user_has_perm('dictionary.add_phraseologic_frames')) {
        	
          $('#add-table-elem-dialog').load(ajax_assign_phraseologic_frame_form, 
        		  {'lemma_id': window.lemma_id,
        		   'phraseologic_frame': JSON.stringify(frame['element'])})
				     .dialog( 'option', 'title', 'Przypisywanie frazeologizmu do haseł:' )
					 .dialog('option', 'width', 300)
				     .dialog('open');
        }
      }
  }
  
  function phraseologicPropositionsExists(lemma_id) {
	  propositionsExists = false;
	  jQuery.ajax({
		type: 'get',
	    url: ajax_phraseologic_propositions_exists,
	    data: {lemma_id: lemma_id},
	    success: function(result) {
	    	propositionsExists = result['propositions_exists'];
	    },
	    async:false
	  });
	  return propositionsExists;
  }
  
  function delete_nkjp_example(example_id)
  {
    if(example_id != -1 && !checkIfSemChangedAndAlert())
    {
      example_id = selected_example_id.replace('nkjp_', '');
      for(var i=0; i<nkjp_examples.length; i++)
      {
        if(nkjp_examples[i].example_id == example_id)
        {
          if(canModifyFrame(nkjp_examples[i].frame_id, window.schemas)) {
  	        nkjp_examples.splice(i, 1);
  	        change = true;
  	        
  		    window.frames_modif = window.frames_modif.slice(0, frames_modif_idx+1);     
  		    var lemma_version = new Lemma_Version(schemas, window.nkjp_examples, window.nkjp_lemma_examples);
  		    frames_modif.push(lemma_version);
  		    frames_modif_idx++;   
  		   
  		    window.selected_example_id = -1;
  		    var parent = document.getElementById("show_nkjp_table");
  		    draw_nkjp_table(parent, selectedFrameIdNkjp, window.nkjp_examples, 'NkjpTableRow', 'nkjp_');  
  		    $("tr.NkjpTableRow").click(function(){
  		      selectNkjpTr(this.id)});
  		    
  		    scrollPosition = $('#new-frame-tables').scrollTop();
  		    draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
  		    $('#new-frame-tables').scrollTop(scrollPosition);  	      
  	        break;
          }
        }  
      }
    }
  }
    
  function delete_all_nkjp_examples(frame_id)
  {
  	if(canModifyFrame(frame_id, window.schemas) && 
  	   !checkIfSemChangedAndAlert())
  	{
  		var new_example_tab = new Array();
  	    for(var i=0; i<nkjp_examples.length; i++)
  	    {
  	      if(nkjp_examples[i].frame_id != frame_id)
  	      {
  	        new_example_tab.push(nkjp_examples[i]);
  	      }  
  	      else
  	        change = true;
  	    }
  	    window.nkjp_examples = new_example_tab;
  	    
  	    frames_modif = frames_modif.slice(0, frames_modif_idx+1);     
  	    var lemma_version = new Lemma_Version(window.schemas, window.nkjp_examples, window.nkjp_lemma_examples);
  	    frames_modif.push(lemma_version);
  	    frames_modif_idx++;
  	    
  	    window.selected_example_id = -1;
  	    var parent = document.getElementById("show_nkjp_table");
  	    draw_nkjp_table(parent, frame_id, window.nkjp_examples, 'NkjpTableRow', 'nkjp_');
  	    $("tr.NkjpTableRow").click(function(){
  	      selectNkjpTr(this.id)});     
  	    
  	    scrollPosition = $('#new-frame-tables').scrollTop();
  	    draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
  	    $('#new-frame-tables').scrollTop(scrollPosition);  
  	}
  }

  function fill_nkjp_example_form(example, form_selector) {	
  	
      $.ajaxJSON({
        method: 'get',
        url: ajax_get_nkjp_dict_ids,
        data: {
          source_str: example.source,
          opinion_str: example.opinion
        },

      callback: function(result) {      
  		$(form_selector+' #id_source').val(result['source_id']);
  		$(form_selector+' #id_opinion').val(result['opinion_id']);
  		$(form_selector+' #id_sentence').val(example.sentence);
          $(form_selector+' #id_comment').val(example.comment);
      },
      error_callback: function(xhr, status, error) {
        error_alert(status + ': ' + error);
      },
      bad_data_callback: function(result) {
        return true;
      },
    });
    return false;
  }

  function modify_nkjp_example(example_id)
  {
    if(example_id != -1 && !checkIfSemChangedAndAlert())
    {
      var example = '';
      for(var i=0; i<window.nkjp_examples.length; i++)
      {
        example_tabId = 'nkjp_'+window.nkjp_examples[i].example_id;
        if(example_tabId == example_id)
        {
          example = window.nkjp_examples[i];
          break;
        }
      }
    
      if(canModifyFrame(example.frame_id, window.schemas) || user_has_perm('dictionary.modify_all_examples')) {
  	    $('.new_frame_tabs').tabs('select', 1);
      	window.selected_example_id = example_id;
      	fill_nkjp_example_form(example, '.nkjp-example-form');
      	window.selectedFrameIdNkjp = example.frame_id;
      	for(var i=0; i<example.arguments_ids.length; i++)
        		selectTd(example.arguments_ids[i]);
      }
    }
  }

  function confirm_nkjp_example(example_tabId)
  {
    if(example_tabId != -1)
    {
      nkjpInstance = getNkjpExampleInstance(window.nkjp_examples, example_tabId);
      confirmNkjpExample(nkjpInstance);
    }
  }
  
  function backOneModification()
  {
    if(window.frames_modif_idx>0)
    {
      window.frames_modif_idx--;
       
      var lemma_version = window.frames_modif[window.frames_modif_idx]; 
      window.schemas = lemma_version.schemas;
      window.nkjp_examples = lemma_version.nkjp_examples;
      window.nkjp_lemma_examples = lemma_version.nkjp_lemma_examples;
      draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_');     
      $("tr.NkjpLemmaTableRow").click(function(){
        selectLemmaNkjpTr(this.id)});
      // rysowanie tabeli nkjp examples na nowo
      draw_nkjp_table(document.getElementById("show_nkjp_table"), window.selectedFrameIdNkjp, window.nkjp_examples, 'NkjpTableRow', 'nkjp_');
      $("tr.NkjpTableRow").click(function(){
        selectNkjpTr(this.id)});
      
      scrollPosition = $('#new-frame-tables').scrollTop();
      draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
      $('#new-frame-tables').scrollTop(scrollPosition);
      selected_id = -1;
    }
  }
  
  function forwardOneModification()
  {
    if(window.frames_modif_idx+1<window.frames_modif.length)
    {
      window.frames_modif_idx++;
      
      var lemma_version = window.frames_modif[window.frames_modif_idx]; 
      window.schemas = lemma_version.schemas;
      window.nkjp_examples = lemma_version.nkjp_examples;
      window.nkjp_lemma_examples = lemma_version.nkjp_lemma_examples;
      draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_');     
      
      $("tr.NkjpLemmaTableRow").click(function(){
        selectLemmaNkjpTr(this.id)});
      
      scrollPosition = $('#new-frame-tables').scrollTop();
      draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
      $('#new-frame-tables').scrollTop(scrollPosition);
      
      // rysowanie tabeli nkjp examples na nowo
      draw_nkjp_table(document.getElementById("show_nkjp_table"), window.selectedFrameIdNkjp, window.nkjp_examples, 'NkjpTableRow', 'nkjp_');
      $("tr.NkjpTableRow").click(function(){
        selectNkjpTr(this.id)});
      selected_id = -1;
    }	
  }

////////////////////////////////////////////////////////////////

////////////////////// WALIDACJA /////////////////////////////// 

function relPosArgumentsGet(arguments_ids, position_arg_ids)
{
  relArguments = new Array();
  for(var i=0; i<arguments_ids.length; i++)
  {
    for(var j=0; j<position_arg_ids.length; j++)
    {
      if(arguments_ids[i] == position_arg_ids[j])
      {
        relArguments.push(position_arg_ids[j]);
        break;
      }
    }
  }  
  return relArguments;
}

function eliminateDuplicates(arr) {
    var i,
	len=arr.length,
	      out=[],
	      obj={};
	 
	  for (i=0;i<len;i++) {
	    obj[arr[i]]=0;
	  }
	  for (i in obj) {
	    out.push(i.split(','));
	  }
	  return out;
}

function checkPosCoordination(position, frame_id, nkjp_examples)
{
  pos_args_id = new Array();
  for(var i=0; i<position.arguments.length; i++)
    pos_args_id.push(frame_id + 'pos_'+position.id+'_'+'arg_'+position.arguments[i].id+'_');
    
  pos_args_groups = new Array();
    
  for(var a=0; a<pos_args_id.length; a++)
  {
    for(var i=0; i<nkjp_examples.length; i++)
    {
      pos_rel_arguments = relPosArgumentsGet(nkjp_examples[i].arguments_ids, pos_args_id);
      if(nkjp_examples[i].frame_id == frame_id && pos_rel_arguments.length!=1)
      {
        for(var j=0; j<pos_rel_arguments.length; j++)
        {
          if(pos_rel_arguments[j] == pos_args_id[a])
          {
            args_group = pos_rel_arguments;
            pos_args_groups.push(args_group);
          }
        }        
      }
    }    
  }
  
  cl_pos_args_groups = new Array();
  // removing duplicates from pos_args_groups
  cl_pos_args_groups = eliminateDuplicates(pos_args_groups);
  // laczenie grup posiadajacych chociaz jeden jednakowy argument    
  pos_args_groups = joinArgGroups(cl_pos_args_groups);
  
  if(pos_args_groups.length == 1)
  {
    for(var j=0; j<pos_args_id.length; j++)
    {
      if(pos_args_groups[0].indexOf(pos_args_id[j])==-1)
      {
        return false;
      }
    }
  } 
  else
    return false;
    
  return true;
}

function joinArgGroups(pos_args_groups)
{
  if(pos_args_groups.length == 1)
    return pos_args_groups;
    
  var joined_arrays = new Array();
  match_index = -1;
  for(var i=1; i<pos_args_groups.length; i++)
  {
    for(var j=0; j<pos_args_groups[0].length; j++)
    {
      if(pos_args_groups[i].indexOf(pos_args_groups[0][j])!=-1)
      {
        match_index = i;
        joined_arrays = pos_args_groups[i].concat(pos_args_groups[0]);
        break;
      }
    }
    if(match_index!=-1)
      break;
  }
  if(match_index==-1)
    return pos_args_groups
  
  pos_args_groups.splice(match_index, 1);
  pos_args_groups.splice(0, 1);
  pos_args_groups.push(joined_arrays);
  pos_args_groups = eliminateDuplicates(pos_args_groups)
  
  return joinArgGroups(pos_args_groups)  
}

function wholeCoordinationSpecified(frame, nkjp_examples)
{
    var frame_id = 'frame_'+frame.id+'_';
    var onlySingleArgPoss = true;
    var hasExamples = false;
    for(var j=0; j<frame['positions'].length; j++)
    {
      if(frame['positions'][j]['arguments'].length > 1)
      {
        onlySingleArgPoss = false;
        foundRelation = checkPosCoordination(frame['positions'][j], frame_id, nkjp_examples)   

        if(!foundRelation)
          return false; 
      }
      else if(frame['positions'][j]['arguments'].length == 1)
        hasExamples=true;
    }    
    if(!onlySingleArgPoss)
      return true;
    else if(onlySingleArgPoss && hasExamples)
      return true;
    else 
      return false;
}

// WALIDACJA 14: Zapisanie hasla dopuszczalne jest jedynie wtedy, 
// kiedy kazda rama zawierajaca wiecej niz jeden argument w tej samej pozycji 
// posiada przyklad potwierdzajacy mozliwosc ich koordynacji 
// (przyklady koordynacji, ktorych zbior obejmuje mozliwosc koordynacji wszystkich argumentow). 
function pass_validate14(schemas)
{   
  valid = true;
  for(var i=0; i<schemas.length; i++)
  {
    var frame_id = 'frame_'+schemas[i].id+'_';
    
    for(var j=0; j<schemas[i]['positions'].length; j++)
    {
      if(schemas[i]['positions'][j]['arguments'].length > 1)
      {
        foundRelation = checkPosCoordination(schemas[i]['positions'][j], frame_id, nkjp_examples)   

        if(!foundRelation)
        {
            if(valid) {
            	HideProgressAnimation();
            	error_alert('Wskazane pozycje nie posiadają przykładów potwierdzających koordynację dla wszystkich typów fraz (przejdź do zakładki ze schematami aby je zobaczyć, jeśli pozycje nie są widoczne sprawdź ustawienia filtrów i powtórz walidację).')
                ShowProgressAnimation();
            }
            schemas[i]['positions'][j].error = true;
            valid = false;
        }  
      }
    }
  }    
  return valid;
}

function send_miss_frames_msg(lemma_id, status_id)
{
  $.ajaxJSON({
      method: 'post',
      url: ajax_send_miss_frames_msg,
      data: {
        lemma_id: lemma_id,
        status_id: status_id,
      },
      callback: function(result) {    
      },
      error_callback: function(xhr, status, error) {
        error_alert(status + ': ' + error);
      },
  });
  return false;
}

// PREWALIDACJA NASTEPUJE JUZ TUTAJ
function validate_new_frames(status_id, status_change) {
  ShowProgressAnimation();
  var framesToValid = new Array();
  selected_frame_id = null;
  
  if(window.selected_id != -1 && !status_change)
  {
    selected_elem = getElementInstance(window.selected_id, window.schemas);
    if(selected_elem['type'] == 'frame')
    {
      framesToValid.push(selected_elem['element']);
      selected_frame_id = selected_elem['element'].id;
    }   
    else 
      framesToValid = window.schemas;
  }
  else
    framesToValid = window.schemas;
  
/// PREWALIDACJA //	
	if(!pass_validate14(framesToValid))
	{  
	    scrollPosition = $('#new-frame-tables').scrollTop();
		draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
		$('#new-frame-tables').scrollTop(scrollPosition);
		clear_errors(window.schemas);
		$('#save').attr("disabled", false);
		HideProgressAnimation();
		return false;
	}

///////////////////

    data = JSON.stringify(framesToValid);
	var convertedExamples = convertExamples(nkjp_examples);
	examples_data = JSON.stringify(convertedExamples)
	var convertedLemmaExamples = convertLemmaExamples(nkjp_lemma_examples);
	lemma_examples_data = JSON.stringify(convertedLemmaExamples);

    $.ajaxJSON({
      method: 'post',
      url: ajax_validate_new_frames,
      data: {
        data: data,
        id: lemma_id,
        examples: examples_data,
        lemma_examples: lemma_examples_data,
        status_id: status_id,
        selected_frame_id: selected_frame_id
      },

    callback: function(result) {
      $('#save').attr("disabled", false);
      if(result['error_message'] && !result['confirm_message'])
      {
        HideProgressAnimation();
        error_alert(result['error_message']);
        ShowProgressAnimation();
        window.schemas = result['frames'];
	      
	    scrollPosition = $('#new-frame-tables').scrollTop();
        draw_filtered_frames(window.schemas, 'new-frame-tables', 'new-frame-table', 'frame_filter', window.nkjp_examples, 'ActiveFrameTable', window.lemma_entry);
        $('#new-frame-tables').scrollTop(scrollPosition);
        clear_errors(window.schemas);
      }
      else if(result['error_message'] && confirm(result['error_message']))
      {
        if(status_id)
        {
            lemma_status_change(status_id);
            send_miss_frames_msg(lemma_id, status_id);
        }
        HideProgressAnimation();
        if(!status_id)
        	alert('Walidacja ukończona pomyślnie.');
      }
      else if(!result['error_message'])
      {
        if(status_id)
        {
            lemma_status_change(status_id);
            send_miss_frames_msg(lemma_id, status_id);
        }
        HideProgressAnimation();
        if(!status_id)
        	alert('Walidacja ukończona pomyślnie.');
      }
      HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
  });

  return false;
}

/////////////////////////// Semantic validation /////////////////////////// 
function semanticsValid(status_id) {
	ShowProgressAnimation();
	semantics_valid = false;
	jQuery.ajax({
		async: false,
	    type: 'get',
	    url: ajax_validate_semantics,
	    data: {
	        lemma_id: window.lemma_id,
	        new_status_id: status_id
	    },
	    success: function(result) {
	    	HideProgressAnimation();
	        if(result['error_message'].length > 0) {
		        alert(result['error_message']);
	        }
	        else {
	        	semantics_valid = true;
	        }
	    },
	});
	return semantics_valid;
}

///////////////////////////////////lemma_examples/////////////////////////////
function nkjp_lemma_modify(nkjp_lemma_examples, example_tabId, form_selector) {
    ShowProgressAnimation();
	this_form = $(form_selector);
    form_data = this_form.serializeArray();
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'sentence' && elem.name != 'source' && elem.name != 'opinion'
       && elem.name != 'comment')
        return elem;
      else {
        if (elem.name == 'sentence')
          sentence = elem.value;
        else if (elem.name == 'source')
          source = elem.value;
        else if (elem.name == 'opinion')
          opinion = elem.value;
        else if (elem.name == 'comment')
          comment = elem.value;
      }
    });

	form_data.push({name: 'sentence', value: sentence});
    form_data.push({name: 'source', value: source});
    form_data.push({name: 'opinion', value: opinion});
    form_data.push({name: 'comment', value: comment});

    $.ajaxJSON({
      method: 'post',
      url: ajax_nkjp_example_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) {    
      nkjpInstance = getNkjpLemmaExampleInstance(nkjp_lemma_examples, example_tabId); 
      nkjpInstance.sentence =  result['sentence'];
      nkjpInstance.source =  result['source'];
      nkjpInstance.opinion =  result['opinion'];
      nkjpInstance.comment =  result['comment'];
      nkjpInstance.example_id = curr_lemma_example_id;
      curr_lemma_example_id--;
      window.selected_lemma_example_id = -1;
      
      window.frames_modif = window.frames_modif.slice(0, frames_modif_idx+1);     
      var lemma_version = new Lemma_Version(window.schemas, window.nkjp_examples, window.nkjp_lemma_examples);
      frames_modif.push(lemma_version);
      frames_modif_idx++;  
     
      draw_nkjp_table(document.getElementById("lemma_example_show"), '', window.nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_');
      $("tr.NkjpLemmaTableRow").click(function(){
        selectLemmaNkjpTr(this.id)});
      resetForm(this_form);
      change = true;
      HideProgressAnimation();	   
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'required fields not selected') {
        HideProgressAnimation();
        error_alert('Wszystkie pola poza komentarzem są wymagane.');
        return false;
      }
      else if (result == 'comment required') {
        HideProgressAnimation();
        error_alert('Wybrane źródlo wymaga dodatkowych informacji.');
        return false;
      }
      else
      {
        HideProgressAnimation();
        return true;
      }      
    },
  });
  return false;
}

function delete_lemma_example(example_id)
{
   if(example_id != -1 && !checkIfSemChangedAndAlert())
   {
     example_id = example_id.replace('nkjpLemma_', '');
     for(var i=0; i<nkjp_lemma_examples.length; i++)
     {
       if(nkjp_lemma_examples[i].example_id == example_id)
       {
         nkjp_lemma_examples.splice(i, 1);
         change = true;
         break;
       }  
     }
     window.selected_lemma_example_id = -1;
     var parent = document.getElementById("lemma_example_show");
     draw_nkjp_table(parent, '', nkjp_lemma_examples, 'NkjpLemmaTableRow', 'nkjpLemma_');     
     $("tr.NkjpLemmaTableRow").click(function(){
       selectLemmaNkjpTr(this.id)});
     
     window.frames_modif = window.frames_modif.slice(0, frames_modif_idx+1);     
     var lemma_version = new Lemma_Version(window.schemas, window.nkjp_examples, window.nkjp_lemma_examples);
     frames_modif.push(lemma_version);
     frames_modif_idx++; 
   } 
}

function assign_lemma_example(example_id)
{
  if(window.selected_lemma_example_id != -1 && !checkIfSemChangedAndAlert())
  {
    window.activeLemmaPanel = 'new_frames';
    $('.tabs').tabs('select', 0);
    $('.new_frame_tabs').tabs('select', 1);
    window.selected_lemma_example_id = example_id;
    var example = '';
    
    for(var i=0; i<window.nkjp_lemma_examples.length; i++)
    {
      example_tabId = 'nkjpLemma_'+window.nkjp_lemma_examples[i].example_id;
      if(example_tabId == example_id)
      {
        example = window.nkjp_lemma_examples[i];
        break;
      }
    }
    fill_nkjp_example_form(example, '.nkjp-example-form');
    resetForm($('.lemma-example-form'));
  }
}

function modify_lemma_example(example_id)
{ 
  if(example_id != -1 && !checkIfSemChangedAndAlert())
  {
    nkjp_lemma_modify(window.nkjp_lemma_examples, example_id, '.lemma-example-form')
  }
}
////////////////////////////////////////////////////////////////


function reserveLemma()
{
  lemma_status_change('');
}

function saveHandle(event)
{
  save_new_frames();
  return false;
}

////////// lemma notes ///////////////
function removeLemmaNote(id) {
  if(id != -1)
  {
	ShowProgressAnimation();
    message_id = id.replace('note_', ''); 
     
    $.ajaxJSON({
      method: 'post',
      url: ajax_remove_lemma_note,
      data: {
              message_id: message_id, 
      },

      callback: function(result) { 
       window.selected_notes_row_id = -1;
       $('#notes').load(ajax_lemma_notes, 'id='+window.lemma_id);	
       HideProgressAnimation();
      },
    
      error_callback: function(xhr, status, error) {
        HideProgressAnimation();
        error_alert(status + ': ' + error);
      },
      bad_data_callback: function(result) {
        if (result == 'can not remove') {
          HideProgressAnimation();
          error_alert('Usuwać można jedynie notatki prywatne.');
          return false;
        }
        else if (result == 'already removed') {
            HideProgressAnimation();
            error_alert('Notatka została już usunięta, odśwież widok.');
            return false;
        }
        else {
          HideProgressAnimation();
          return true;
        }
      },
    });
  }	
}

////////////////////////////////////

//////////////////////////////////////

function modifyLemmaNote(id, form_selector)
{
  ShowProgressAnimation();
  if(id != -1)
  {
    message_id = id.replace('note_', ''); 

	this_form = $(form_selector);	
    form_data = this_form.serializeArray();
    private_flag = false;
  
    form_data = $.map(form_data, function(elem)
    { 
      if (elem.name != 'topic' && elem.name != 'message_text' &&
         elem.name != 'private')
        return elem;
      else {
        if (elem.name == 'topic')
          topic = elem.value;
        else if (elem.name == 'message_text')
          message_text = elem.value;
        else if (elem.name == 'private')
          private_flag = true;
      }
    });

	form_data.push({name: 'topic', value: topic});
    form_data.push({name: 'message_text', value: message_text});
    form_data.push({name: 'private', value: private_flag});
    form_data.push({name: 'lemma_id', value: window.lemma_id});
    form_data.push({name: 'message_id', value: message_id});

    $.ajaxJSON({
      method: 'post',
      url: ajax_lemma_notes_modify,
      data: {
        form_data: form_data
      },

    callback: function(result) {      
        $('#notes').load(ajax_lemma_notes, 'id='+result['id']);
        HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      if (result == 'required fields not selected') {
        HideProgressAnimation();
        error_alert('Należy wypełnić temat oraz treść wiadomości.');
        return false;
      } 
      else if (result == 'not private') {
        HideProgressAnimation();
        error_alert('Można modyfikować jedynie notatki prywatne.');
        return false;
      }
      else
      {
        HideProgressAnimation();
        return true;
      }
    },
  });
  return false;
  }	
}

// zaznacz przyklad skladnicowy
function selectTableTr(id)
{  	  
	if($('#'+id).css("background-color") != window.selectedColor) 
	{
		$('#'+id).css("background-color", window.selectedColor);
		$('#'+id).children().css('background-color', window.selectedColor);
	}
	else
	{
		$('#'+id).css("background-color", '');
		$('#'+id).children().css('background-color', '');
	}
}

function show_skl_propositions()
{
	$('#id_propose_B').val('');
	$('#skladnica-examples').empty();
	$('#frame-realizations').empty();
	$('#skladnica-examples').load(ajax_show_skladnica_examples, 'id='+$('#id_propose_skladnica').val(), function() {
		$("#example-propositions tr").click(function(){
		    selectTableTr(this.id)
		});
	    $("#example-propositions tr").dblclick(function(){
	    	$('#example-opinion-dialog').empty();
	        $('#example-opinion-dialog').load(ajax_example_opinion_form, "example_id="+this.id).dialog('open'); 
	    });
	});
	$('#frame-realizations').load(ajax_show_frame_realizations, {'id': $('#id_propose_skladnica').val(),
																 'propose_type': 'skladnica'});
}

function show_B_propositions()
{
	$('#id_propose_skladnica').val('');
	$('#skladnica-examples').empty();
	$('#frame-realizations').empty();
	$('#frame-realizations').load(ajax_show_frame_realizations, {'id': $('#id_propose_B').val(),
		 														 'propose_type': 'B'});
}

function get_skladnica_example_and_fill_form() {
	skl_frame_id = $(this).val();
    $.ajaxJSON({
      method: 'post',
      url: ajax_get_skladnica_example,
      data: {
    	  skl_frame_id: skl_frame_id
      },
      callback: function(result) {  
    	example = serializedNkjpToObj(result['example']);
  		$('.nkjp-example-form #id_source').val(example.source);
		$('.nkjp-example-form #id_opinion').val(example.opinion);
		$('.nkjp-example-form #id_sentence').val(example.sentence);
        $('.nkjp-example-form #id_comment').val(example.comment);
      },
      error_callback: function(xhr, status, error) {
        error_alert(status + ': ' + error);
      },
    });
}

function get_xcp_example_and_fill_form() {
	exampleId = $(this).val();
    $.ajaxJSON({
      method: 'post',
      url: ajax_get_xcp_example,
      data: {
    	  example_id: exampleId
      },
      callback: function(result) {  
    	example = serializedNkjpToObj(result['example']);
  		$('.nkjp-example-form #id_source').val(example.source);
		$('.nkjp-example-form #id_opinion').val(example.opinion);
		$('.nkjp-example-form #id_sentence').val(example.sentence);
        $('.nkjp-example-form #id_comment').val(example.comment);
      },
      error_callback: function(xhr, status, error) {
        error_alert(status + ': ' + error);
      },
    });
}

function fill_frame_chars()
{
	frame_id = $(this).val();
    $.ajaxJSON({
      method: 'post',
      url: ajax_get_frame_chars,
      data: {
    	  frame_id: frame_id
      },
      callback: function(result) {  
  		$('#id_reflex').val(result['reflex_id']);
  		$('#id_negativity').val(result['negativity_id']);
  		$('#id_predicativity').val(result['predicativity_id']);
  		$('#id_aspect').val(result['aspect_id']);
      },
      error_callback: function(xhr, status, error) {
        error_alert(status + ': ' + error);
      },
    });
}

function create_example_opinion_dialog()
{
  $('#example-opinion-dialog').dialog({ autoOpen: false, 
	  								    modal: 'true',
	  								    closeOnEscape: 'true',
	  								    title: 'Oznaczanie poprawności przykładu'});
}

function example_opinion_form_submit() {
    ShowProgressAnimation();
    is_wrong = false;
	this_form = $(this);
    form_data = this_form.serializeArray(); 
  
    form_data = $.map(form_data, function(elem)
    {
      if (elem.name != 'is_wrong')
        return elem;
      else {
        if (elem.name == 'is_wrong')
          is_wrong = elem.value;
      }
    });

	form_data.push({name: 'is_wrong', value: is_wrong});
	form_data.push({name: 'example', value: $('.selected-example').attr('id')})

    $.ajaxJSON({
      method: 'post',
      url: ajax_example_opinion_form_submit,
      data: {
        form_data: form_data
      },

    callback: function(result) {   
      $('#example-opinion-dialog').dialog('close');
      $('#id_propose_skladnica').trigger('change');  
      HideProgressAnimation();
    },
    error_callback: function(xhr, status, error) {
      HideProgressAnimation();
      error_alert(status + ': ' + error);
    },
    bad_data_callback: function(result) {
      HideProgressAnimation();
      return true;
    },
  });
  return false;
}

function gridPreviewContent(isPreview) {
      $.ajaxJSON({
      method: 'get',
      url: ajax_preview_select,
      async: false,
      data: {
        isPreview: isPreview, 
      },

      callback: function(result) {
        
        if(result['reload'])
        {
          if(isPreview)
          {
            window.lastPrevSelectedId = window.prev_lemma_id;
            grid.trigger("reloadGrid");

            data = grid.jqGrid('getGridParam', 'postData');
            data['mask'] = '';
            data['id'] = window.prev_lemma_id;

            $.get(ajax_location, data, function(resp) {
              var selectedRow = resp['selected_id'] + "";
              var rowIndex = resp['rowIndex'];
              var recordsCount = resp['records'];
              if (recordsCount > 0){
                grid.jqGrid('scrollToRow', rowIndex, recordsCount);
              }
            });        
          }
          else
          {
            window.lastSelectedId = window.lemma_id;
            grid.trigger("reloadGrid");

            data = grid.jqGrid('getGridParam', 'postData');
            data['mask'] = '';
            data['id'] = window.lemma_id;

            $.get(ajax_location, data, function(resp) {
              var selectedRow = resp['selected_id'] + "";
              var rowIndex = resp['rowIndex'];
              var recordsCount = resp['records'];
              if (recordsCount > 0){
                grid.jqGrid('scrollToRow', rowIndex, recordsCount);
              }
            });
          }
          refresh_column_headers();
        }
      },

      error_callback: function(xhr, status, error) {
        error_alert(status + ': ' + error);
      },
    });
return false;
}

/////////////////////////////////////

$(function(){
  $.get(ajax_deselect_preview_tab);
	
  $('form.argument-add-form #show-realizations').live('click', show_argument_realizations);
  $('form.frame-conversion-form').live('submit', convertFrameFormSubmit);
  
  $('form.frame-form').live('submit', frame_form_submit);
  $('form.pos-cat-form').live('submit', pos_cat_form_submit);
  
// lemma notes
  $('form.lemma-notes-form').live('submit', lemma_notes_form_submit);
  $('#add_lemma_note form.lemma-notes-form').live('change', function(){
	  window.notesNotSaved = true;
  });
  $('form.lemma-notes-form').live('reset', function(){
	  window.notesNotSaved = false;
  });
  
// czasowniki podobne
  $('form.similar-lemmas-new-form').live('submit', similar_lemmas_new_form_submit);
  $('form.similar-lemmas-old-form').live('submit', similar_lemmas_old_form_submit);
  $('#similar-lemmas-show-synonyms').live('click', similar_lemmas_show_synonyms);
  $('#related-lemmas-show').live('click', related_lemmas_show);
  $('#reset-similar-button').live('click', similar_lemmas_reset);

  $('form.position-add-form').live('reset', function(){
	$(this).closest("$[id$='-dialog']").dialog('close');
    }); 
  $('form.argument-add-form').live('reset', function(){
	  $(this).closest("$[id$='-dialog']").dialog('close');
    });
  $('form.frame-form').live('reset', function(){
	  $(this).closest("$[id$='-dialog']").dialog('close');
    });
  $('form.pos-cat-form').live('reset', function(){
	  $(this).closest("$[id$='-dialog']").dialog('close');
    });
  $('form.frame-conversion-form').live('reset', function(){
	  $(this).closest("$[id$='-dialog']").dialog('close');
	});
  $('form.create-position-form').live('reset', function(){
	  $(this).closest("$[id$='-dialog']").dialog('close');
  });
  
  $('#add-table-elem-dialog').live('dialogclose', function(event) {
	  window.addedFrame = '';
	  $('#add-table-elem-dialog').data('selectedArgId', '');
	  $('#add-table-elem-dialog').data('selectedFrame', '');
  });
  
  $('form.nkjp-example-form').live('submit', nkjp_example_form_submit);
  $('button#nkjp-example-form-cancel').live('click', function(){
	    if(confirm("Czy jesteś pewien, że chcesz wyczyścić formularz dodawania przykładów?")){
	    	resetForm($('form.nkjp-example-form'));
	    }
  });
  
  $('form.semantic-example-form').live('submit', semantic_example_form_submit);
  $('button#semantic-example-form-cancel').live('click', function(){
	    if(confirm("Czy jesteś pewien, że chcesz wyczyścić formularz dodawania przykładów?")){
	    	resetForm($('form.semantic-example-form'));
	    }
  });
  
  $('form.lemma-example-form').live('submit', nkjp_lemma_example_form_submit);
  $('form.lemma-example-form').live('change', function(){
	  window.lemmaExNotSaved = true;
  });
  $('button#lemma-example-form-cancel').live('click', function(){
	    if(confirm("Czy jesteś pewien, że chcesz wyczyścić formularz dodawania przykładów?")){
	    	resetForm($('form.lemma-example-form'));
	    	window.lemmaExNotSaved = false;
	    }
  });

  $('form.position-add-form').live('submit', add_pos_form_submit);
  $('form.argument-add-form').live('submit', argument_form_submit);
  $('form.assign-phraseologic-frame-form').live('submit', assignPhraseologicFrameFormSubmit);
  $('form.assign-phraseologic-frame-form').live('reset', function(){
	  $(this).closest("$[id$='-dialog']").dialog('close');
  });
  
  $('form.create-position-form').live('submit', create_position_form_submit);
  
  $("[id^=id_value_positions_0], [id^=id_value_arguments_0], [id^=id_value_parameter_0]").live('change', function(event) {
	  arguments_form_change(-1, null, $(event.target).closest(".argument-add-form"), window.lemma_id)
  });
  $("[id^=id_arg_type]").live('change', function(event) {
	  arguments_form_change(0, null, $(event.target).closest(".argument-add-form"), window.lemma_id)
  });
  
  $("$[id$='-add_position_button']").live('click', function(event){openAddPositionDialog(event)});
  $("$[id$='-add_argument_button']").live('click', function(event){openAddArgumentDialog(event, window.lemma_id, 'Tworzenie typu frazy:')});
  $("$[id$='-add_realization_button']").live('click', function(event){openAddArgumentDialog(event, window.lemma_id, 'Tworzenie rozwinięcia typu frazy:')});
  $("$[id$='-select_argument_button']").live('click', function(event){openSelectArgumentDialog(event, window.lemma_id)});
  
  $('#id_propose_skladnica').live('change', show_skl_propositions);
  $('#id_propose_B').live('change', show_B_propositions);
  $('#skladnica-example-propositions-select').live('change', get_skladnica_example_and_fill_form);
  $('#xcp-example-propositions-select').live('change', get_xcp_example_and_fill_form);
  $('#realization-select').live('change', fill_frame_chars);
  
  $('form.example-opinion-form').live('submit', example_opinion_form_submit); 
  $('#add-aspect-rel-frames').live('click', add_aspect_rel_frames);
  
  $('#position #remove-position').live('click', remove_position);
  $('#argument #remove-argument').live('click', remove_argument);
  $('#position #edit-position').live('click', edit_position);
  $('#argument #edit-argument').live('click', edit_argument);
  $('#argument #edit-realization').live('click', edit_realization);
  
  $('#new-frame-tables').live('click', function(e) {
      e.stopPropagation();
      unselectTd(window.selected_id);
      window.selected_id = -1;
      unselectTd(selectedFrameIdNkjp);
      window.selectedArgumentsIdNkjp = new Array();
      $('#show_nkjp_table').empty();
      selectedFrameIdNkjp = -1;
      window.selected_example_id = -1;

      if (window.activeNewFramePanel == 'add_nkjp_example') {
    	  refresh_example_propositions();
      }
    });
  
  gridPreviewContent(false);
  
  $('.tabs').tabs().bind('tabsselect', function(event, ui) {
      if(ui.panel.id == 'preview_lemma')
      {
        setTimeout(function () {
          $(window).trigger('resize');
        }, 30);
        window.activeLemmaPanel = ui.panel.id;
        gridPreviewContent(true);
      }
      else if(ui.panel.id == 'new_frames')
      {
        setTimeout(function () {
          $(window).trigger('resize');
        }, 30);
        window.activeLemmaPanel = ui.panel.id;
        gridPreviewContent(false);
      }
      else if(ui.panel.id == 'semantics')
      {
        setTimeout(function () {
          $(window).trigger('resize');
        }, 30);
        window.activeLemmaPanel = ui.panel.id;
        gridPreviewContent(false);
      }
      else if( ui.panel.id == 'old_frames' || ui.panel.id == 'notes' || ui.panel.id == 'examples' || 
             ui.panel.id == 'change_ctrl' || ui.panel.id == 'status')
      {
        window.activeLemmaPanel = ui.panel.id;
        gridPreviewContent(false);
      }  
  });
  
  refresh_column_headers();
});