var FormName;
var lastmethod;

var Methods = {
  'clustal':1, 'dialign':1, 'msa':1, 'muscle':1,
  'poa':1, 'probcons':1, 'tcoffee':1
};
////////////////
//
// (de)select alignment method
//
function check_all_method() {
  for (var M in Methods) {
    check_method(M,true);
  }
}
////////////////
//
// manage format panel
//
function check_method(id,val) {
  var box = document.getElementById(id+"-check");
  if ( box.disabled ) { box.checked = false; return; }
  if ( val !=null ) {
    box.checked = val;
  }
}
function show_format_panel() {
  var panel = document.getElementById('format-panel');
  panel.style.display = 'block';
}
function hide_format_panel() {
  var panel = document.getElementById('format-panel');
  panel.style.display = 'none';
}
////////////////
//
//// manage method options
//
function open_setup(method) {
  if ( method == undefined ) return;
  if ( method == null ) return;
  if ( method.length == 0 ) return;
  var boxid = method+"-box";
  if ( boxid == "undefined-box" ) return;
//alert( "open_setup for method["+method+"] boxid["+boxid+"]");
  var box = document.getElementById( method+"-box" );
  box.style.zIndex  = 1;
  box.style.display = 'block';
  lastmethod = method;
}
function close_setup(method) {
  if ( !method ) return;
  var box = document.getElementById( method+"-box" );
  if ( box == null ) {
    alert( method+"-box not found" );
    return;
  }
  box.style.zIndex  = 0;
  box.style.display = 'none';
  lastmethod = null;
}
function show_setup(method) {
  if ( method == null ) return false;
  if ( lastmethod == method ) { hide_setup(method); return false; }
  if ( lastmethod == null ) {
    open_setup(method);
//    window.location =  '#show_setup';
  } else {
    close_setup(lastmethod);
    open_setup(method);
//    window.location.replace('#show_setup');
  }
  return false;
}
function hide_setup(method) {
  close_setup(method);
  var form = document.forms[FormName];
  var radio = form['method-setup'];
  for ( var i=0; i<radio.length; i++ ) {
    if ( radio[i].defaultChecked ) radio[i].checked = true;
  }
  return false;
//  window.back();
}
////////////////
//
//// manage sequence input
//
function reset_select(select) {
  for ( var i=0; i<select.length; i++ ) {
    select.options[i].selected = select.options[i].defaultSelected;
  }
}
function input_change(option,which) {
  var form = document.forms[FormName];
  var opt = document.getElementById('input_option');
  if ( option == 'upload' ) opt.value = 'input_file';
  if ( option == 'enter' )  opt.value = 'input_data';
  if ( option == 'example' ) {
    opt.value = 'input_example';
    var A = ['dna','pep'];
    for ( var i=0; i<A.length; i++ ) {
      var select = form[A[i]+'_example'];
      if ( A[i] == which ) {
        var obj = document.getElementById('input_example');
        obj.value = select.options[select.selectedIndex].value;
      } else {
        reset_select(select);
      }
    }
  }    
}
////////////////
//
//// shading option
//
function change_outformat(opt) {
  var form = document.forms[FormName];
  var truefalse;
  if ( opt == "html" ) truefalse = false;
  if ( opt == "cons"  ) truefalse = true;
  var input = form["format_consensus"];
  input[0].disabled = input[1].disabled = truefalse;
  form["format_conserved"].disabled = truefalse;
  input = form["format_color"];
  input[0].disabled = input[1].disabled = input[2].disabled = truefalse;
}
function change_consensus(by) {
  var form = document.forms[FormName];
  if ( by == 'byidentity' ) {
    form['format_bysimilarity'].checked = !form['format_byidentity'].checked;
  }
  if ( by == 'bysimilarity' ) {  
    form['format_byidentity'].checked = !form['format_bysimilarity'].checked;
  }
}
function change_outcolor(opt) {
  var form = document.forms[FormName];
  var truefalse;
  if ( opt == "consensus_shaded" ) truefalse = false;
  if ( opt == "protein_colored"  ) truefalse = true;
  form['format_reverse'].disabled = truefalse;
  form['format_byidentity'].disabled = truefalse;
  form['format_bysimilarity'].disabled = truefalse;
  form['format_conserved'].disabled = truefalse;
}
//////////////////
//
// submit form
//
function set_time_estimate(which) {
  var form = document.forms[FormName];
  var obj = document.getElementById('format_time_estimate');
  if ( which=="submit" )
    obj.value = '';
  if ( which=="time estimate" )
    obj.value = 'y';
}
function form_validate(which) {
  set_time_estimate(which);
//
  var form = document.forms[FormName];
// input data ?
  var opt = document.getElementById('input_option');
  var exa = document.getElementById('input_example');
  if ( opt.value == 'none' ) {
    alert( "Input specification is required." );
    return false;
  }
  if ( opt.value == 'input_file' &&
       form['input_file'].value.length == 0 ) {
    alert( "Missing input file name." );
    return false;
  }
  if ( opt.value == 'input_data' &&
       form['input_data'].value.length == 0 ) {
    alert( "Missing input data text." );
    return false;
  }
  if ( opt.value == 'input_example' &&
       exa.value == 'none' ) {
    alert( "Missing input example selection." );
    return false;
  }
// method checked ?
  var method_checked = false;
  for ( var M in Methods ) {
    if ( ! form[M+"-check"].checked ) continue;
    method_checked = true;
    break;
  }
  if ( ! method_checked ) {
    alert( "No alignment method specified.");
    return false;
  }
  return true;
}
////////////////
//
// resets
//
function replace_file_upload(nodeid) {
  var seat = document.getElementById(nodeid+'-seat');
  if ( seat==null ) { return; }
  var old = seat.getElementsByTagName('input')[0];
//
  var widget = document.createElement('input');
  widget.setAttribute('id',nodeid);
  widget.setAttribute('name',nodeid);
  widget.setAttribute('type','file');
  widget.setAttribute('size','20');
  widget.onchange = function() { input_change("upload"); };
  seat.replaceChild(widget,old);
}
function reset_inputs() {
  var form = document.forms[FormName];
  var opt = document.getElementById('input_option');
  opt.value = 'none';
//
  var exa = document.getElementById('input_example');
  exa.value = 'none';
//
  replace_file_upload('input_file');
//
  form['input_data'].value = form['input_data'].defaultValue;
  reset_select(form['dna_example']);
  reset_select(form['pep_example']);
}
function reset_format() {
  var form = document.forms[FormName];

  var radio = form['format_color'];
  for ( var i=0; i<radio.length; i++ ) {
    if ( radio[i].defaultChecked == true ) radio[i].checked = true;
    if (radio[i].checked) change_outcolor(radio[i].value);
  }
  form['format_reverse'].checked = form['format_reverse'].defaultChecked;
  form['format_byidentity'].checked = form['format_byidentity'].defaultChecked;
  form['format_bysimilarity'].checked = form['format_bysimilarity'].defaultChecked;
  form['format_conserved'].checked = form['format_conserved'].defaultChecked;

  radio = form['format_order'];
  for ( var i=0; i<2; i++ ) {  
    radio[i].checked = radio[i].defaultChecked;
  }
}
function reset_all_method() {
  for (var M in Methods) {
    check_method(M,false);
    reset_all_options(M);
    close_setup(M);
  }
  var form = document.forms[FormName];
  var radio = form['method-setup'];
  for ( var i=0; i<radio.length; i++ ) {
    if ( radio[i].defaultChecked ) radio[i].checked = true;
  }
}
function reset_form_value(obj) {
  if ( obj.type == 'checkbox' ) { 
    obj.checked = obj.defaultChecked; 
    return; 
  }
  if ( obj.type == 'select-one' ||
       obj.type == 'select-multiple' ) {
    for ( var i=0; i<obj.options.length; i++ ) {
      obj.options[i].selected = obj.options[i].defaultSelected;
    }
    return;
  }
  if ( obj.type == 'radio' ) {
    if ( obj.defaultChecked ) obj.checked = true;
    return;
  }
  obj.value = obj.defaultValue;
}
function reset_all_options(method) {
  var form = document.forms[0];
  for ( var i=0; i<form.elements.length; i++ ) {
    var name = form.elements[i].name;
    var pre = name.split("_")[0];
    if ( pre == method ) {
      var obj = document.getElementsByName(name);
      for ( var j=0; j<obj.length; j++ ) {
        reset_form_value(obj[j]);
      }
    }
  }
}
function reset_all() {
  reset_inputs();
  reset_all_method();
  reset_format();
//  if ( statedata != null ) statedata.remove();
}
////////////////
//
// state data
//
var statedata;
function loadBody() {
  if ( statedata == null ) load_state();
//  alert("loadBody0: statedata[lastmethod]="+statedata['lastmethod'] );
    var newmethod = statedata['lastmethod'];
//  alert( "loadBody1: newmethod["+newmethod+"]");
  if ( newmethod == null || newmethod.length==0 ) {
    hide_setup();
  } else {
    show_setup( newmethod );
  }
//  alert( "loadBody2: lastmethod["+lastmethod+"]");
}
function unloadBody() {
//  alert( "unloadBody: lastmethod["+lastmethod+"]");
  save_state();
}
function save_state() {
  statedata['lastmethod'] = lastmethod;
  statedata.store();    
}
function load_state() {
//alert("Version 2.0");
  statedata = new Cookie(document, "collapse_menu_state", 24 );
  statedata.load();
}
