$(document).ready(function() {
  $('#main ui-behind button').hide();

  // save buttons shown or not //{{{
  $('#main ui-tabbar ui-tab:not(.switch)').click(function(event){
    var me = $(event.target).parents('ui-tab');
    if ($('#state').text() != 'finished')
      if (me.attr('id') == 'tabdetails') {
        $('#main ui-behind button').show();
      } else {
        $('#main ui-behind button').hide();
      }  
  }); //}}}

  // New entry //{{{
  $(document).on('click','#main .header button',function(){
    var node = new_entry($(this).parents('ui-tabbed'));
    node.addClass('indent');
  }); //}}}
  
  // Delete entries //{{{
  $(document).on('click','#main td.del a',function(event){
    var top = $(event.target).parents('ui-tabbed');
    remove_entry($("input",$(event.target).parents('tr')).get(0),false);
    mark_main_save(top);
    return false;
  }); //}}}

  // Save entries //{{{
  $('#main ui-behind button').click(function(event){
    save_main($(event.target).parents('ui-tabbed'));
  }); //}}}

  $(document).on('keyup','#dat_details input.pair_name, #dat_details input.prop_value, #dat_details textarea.prop_value, #dat_details select.prop_value, #dat_details input.pair_value',function(e){ mark_main_save($(e.target).parents('ui-tabbed')); });
  $(document).on('change','#dat_details select.prop_value',function(e){ mark_main_save($(e.target).parents('ui-tabbed')); });
});

function mark_main_save(top) { //{{{
  var visid = $('ui-tabbar ui-tab',top).not('.switch').not('.inactive').attr('id').replace(/tab/,'');
  var tab  = $('#dat_' + visid);
  var details = serialize_details(tab).serializeXML();

  if (details != save[visid]) {
    $('ui-tabbar ui-behind button',top).addClass('highlight');
  } else {  
    $('ui-tabbar ui-behind button',top).removeClass('highlight');
  }
} //}}}
function save_main(top) { //{{{
  var visid   = $('ui-tabbar ui-tab',top).not('.switch').not('.inactive').attr('id').replace(/tab/,'');
  var tab     = $('#dat_' + visid);
  var node    = graphrealization.description.get_node_by_svg_id($('input.pname_svgid').val());
  var details = serialize_details(tab).serializeXML();
  if (details != save[visid]) {
    save[visid] = details;
    $('ui-tabbar ui-behind button',top).removeClass('highlight');

    var newn = serialize_details(tab).attr('svg-id',$('input.pname_svgid').val());
    if (newn.children().length == 0) {
      newn.append(node.children());
    }  
    node.replaceWith(newn);
    $('ui-tabbar ui-behind button:nth-child(2)',top).removeClass('highlight');

    save_description();
  }  
} //}}}

function save_description() {
  var serxml = graphrealization.description.get_description();
  var url = $("#current-instance").text();
  $.ajax({
    type: "PUT", 
    url: url + "/properties/values/description/",
    data: ({'content': '<content>' + serxml + '</content>'}),
  });
}

function serialize_details(parent) { //{{{
  var ele = $('input.pname_element',parent).val();
  var xml = $X('<' + ele + ' xmlns="http://cpee.org/ns/description/1.0"/>');
  switch(ele) {
    case 'call':
        xml.attr('id',$('input.pname_id').val());
        xml.attr('endpoint',$('input.pname_endpoint').val());

        var para = $X('<parameters xmlns="http://cpee.org/ns/description/1.0"/>');
        xml.append(para);
        
        if ($('input.pname_method',parent).length > 0) {
          var pars = $X('<parameters xmlns="http://cpee.org/ns/description/1.0"/>');
          var meth = $X('<method xmlns="http://cpee.org/ns/description/1.0"/>');
              meth.text($('input.pname_method',parent).val());
          var labl = $X('<label xmlns="http://cpee.org/ns/description/1.0"/>');
              labl.text($('input.pname_label',parent).val());
          para.append(labl);
          para.append(meth);
          para.append(pars);
          $('tr.pair',parent).each(function(){
            var nam = $('input.pair_name',this).val();
            var val = $('input.pair_value',this).val();
            var par = $X('<' + nam + ' xmlns="http://cpee.org/ns/description/1.0"/>');
            par.text(val);
            pars.append(par);
          });
        }

        if ($('textarea.pname_finalize',parent).length > 0) {
          var mani = $X('<finalize xmlns="http://cpee.org/ns/description/1.0"/>');
              mani.text($('textarea.pname_finalize',parent).val());
          xml.append(mani);
        }
        if ($('textarea.pname_update',parent).length > 0) {
          var mani = $X('<update xmlns="http://cpee.org/ns/description/1.0"/>');
              mani.text($('textarea.pname_update',parent).val());
          xml.append(mani);
        }
      break;
    case 'manipulate':
      xml.attr('id',$('input.pname_id').val());
      if ($('textarea.pname_script',parent).length > 0) {
        xml.text($('textarea.pname_script',parent).val());
      }
      break;
    case 'loop':
      xml.attr($('select.pname_mode').val(),$('input.pname_condition').val());
      break;
    case 'choose':
      xml.attr('mode',$('select.pname_mode').val());
      break;
    case 'alternative':
      xml.attr('condition',$('input.pname_condition').val());
      break;
    case 'critical':
      xml.attr('sid',$('input.pname_sid').val());
      break;
    case 'parallel':
      if (parseInt($('input.pname_wait').val()) > -1) {
        xml.attr('wait',$('input.pname_wait').val());
      }  
      break;
    case 'parallel_branch':
      if ($('input.pname_pass',parent).length > 0) {
        xml.attr('pass',$('input.pname_pass').val());
      }  
      if ($('input.pname_local',parent).length > 0) {
        xml.attr('local',$('input.pname_local').val());
      }  
      break;
    // TODO group
  }  

  return xml;
} //}}}