/*
 * Systems Biology Ontolgy
 * 
 * Mélanie Courtot
 * Camille Laibe
 * 20080820
 */

 
 // validate_person
function validate_person()
{
  var f = document.forms[0];
  if (f.fst.value.length == 0)
  {
    alert("First name is required.");
    return false;
  }
  if (f.lst.value.length == 0)
  {
    alert("Last name is required.");
    return false;
  }
  if (f.org.value.length == 0)
  {
    alert("Organisation is required.");
    return false;
  }
  if (f.eml.value.length == 0)
  {
    alert("Email is required.");
    return false;
  }
  if (f.eml.value.indexOf("@") == -1)
  {
    alert("Email must contain '@'.");
   return false;
  }
  return true;
};


// validate_submitter
function validate_submitter()
{
 return validate_person();
};


// validate_pubmed_id
function validate_pubmed_id()
{
 var f = document.forms[0];
 if (f.pid.value.length == 0) {
  alert("PubMed ID is required.");
  return false;
 }
 return true;
};


// validate_pubmed
function validate_pubmed()
{
  return validate_pubmed_id()
};


// update_bid
function update_bid()
{
 var f = document.forms[0];
 var t = f.bids.options[f.bids.selectedIndex].text;
 f.bid.value = t.substring(0, 15);
};


// set_resource_text
function set_resource_text(form)
{
 var value = form.rnm.options[form.rnm.selectedIndex].value;
 if (value.match("ChEBI")) {
  form.rid.value = "CHEBI:";
 } else if (value.match("EC code")) {
  form.rid.value = "EC ";
 } else if (value.match("Ensembl")) {
  form.rid.value = "ENS";
 } else if (value.match("Gene Ontology")) {
  form.rid.value = "GO:";
 } else if (value.match("IntAct")) {
  form.rid.value = "EBI-";
 } else if (value.match("InterPro")) {
  form.rid.value = "IPR";
 } else if (value.match("KEGG Compound")) {
  form.rid.value = "C";
 } else if (value.match("KEGG Reaction")) {
  form.rid.value = "R";
 } else if (value.match("PIRSF")) {
  form.rid.value = "SF";
 } else {
  form.rid.value = "";
 }
 form.rid.focus();
};


// validate_resource_text
function validate_resource_text(form)
{
 var name = form.rnm.options[form.rnm.selectedIndex].value;
 var id = form.rid.value;
 if (id.length == 0) {
  alert("Resource identifier is required.");
  return false;
 }
 if (name.match("BIND")) {
  var regex = /^\d+$/
  if (!regex.test(id)) {
   alert("Invalid BIND resource identifier respect to pattern:\n^\\d+$");
   return false;
  }
 } else if (name.match("ChEBI")) {
  value = form.rid.value;
  var regex = /^CHEBI:\d{5}$/
  if (!regex.test(id)) {
   alert("Invalid ChEBI resource identifier respect to pattern:\n^CHEBI:\\d{5}$");
   return false;
  }
 } else if (name.match("EC code")) {
  value = form.rid.value;
  var regex = /^EC (\d+|\d+\.(-|\d+)|\d+\.\d+\.(-|\d+)|\d+\.\d+\.\d+\.(-|\d+))$/
  if (!regex.test(id)) {
   alert("Invalid EC code resource identifier respect to pattern:\n^EC (\\d+|\\d+\\.(-|\\d+)|\\d+\\.\\d+\\.(-|\\d+)|\\d+\\.\\d+\\.\\d+\\.(-|\\d+))$");
   return false;
  }
 } else if (name.match("Ensembl")) {
  value = form.rid.value;
  var regex = /^ENS\w{3}[FPTG]\d{11}$/
  if (!regex.test(id)) {
   alert("Invalid Ensembl resource identifier respect to pattern:\n^ENS\\w{3}[FPTG]\\d{11}$");
   return false;
  }
 } else if (name.match("Gene Ontology")) {
  value = form.rid.value;
  var regex = /^GO:\d{7}$/
  if (!regex.test(id)) {
   alert("Invalid Gene Ontology resource identifier respect to pattern:\n^GO:\\d{7}$");
   return false;
  }
 } else if (name.match("ICD10")) {
  value = form.rid.value;
  var regex = /^[A-Z]\d+(\.[-\d+])?$/
  if (!regex.test(id)) {
   alert("Invalid ICD10 resource identifier respect to pattern:\n^[A-Z]\\d+(\\.[-\\d+])?$");
   return false;
  }
 } else if (value.match("IntAct")) {
  value = form.rid.value;
  var regex = /^EBI\-[0-9]+$/
  if (!regex.test(id)) {
   alert("Invalid IntAct resource identifier respect to pattern:\n^EBI\\-[0-9]+$");
   return false;
  }
 } else if (name.match("InterPro")) {
  value = form.rid.value;
  var regex = /^IPR\d{6}$/
  if (!regex.test(id)) {
   alert("Invalid InterPro resource identifier respect to pattern:\n^IPR\\d{6}$");
   return false;
  }
 } else if (name.match("KEGG Pathway")) {
  value = form.rid.value;
  var regex = /^\w{2,3}\d{5}$/
  if (!regex.test(id)) {
   alert("Invalid KEGG Pathway resource identifier respect to pattern:\n^\w{2,3}\d{5}$");
   return false;
  }
 } else if (name.match("KEGG Compound")) {
  value = form.rid.value;
  var regex = /^C\d+$/
  if (!regex.test(id)) {
   alert("Invalid KEGG Compound resource identifier respect to pattern:\n^C\\d+$");
   return false;
  }
 } else if (name.match("KEGG Reaction")) {
  value = form.rid.value;
  var regex = /^R\d+$/
  if (!regex.test(id)) {
   alert("Invalid KEGG Reaction resource identifier respect to pattern:\n^R\\d+$");
   return false;
  }
 } else if (name.match("OMIM")) {
  value = form.rid.value;
  var regex = /^[*#+%^]?\d{6}$/
  if (!regex.test(id)) {
   alert("Invalid OMIM resource identifier respect to pattern:\n^[*#+%^]?\\d{6}$");
   return false;
  }
 } else if (name.match("PIRSF")) {
  value = form.rid.value;
  var regex = /^SF\d{6}$/
  if (!regex.test(id)) {
   alert("Invalid PIRSF resource identifier respect to pattern:\n^SF\d{6}$");
   return false;
  }
 } else if (name.match("Reactome")) {
  value = form.rid.value;
  var regex = /^\d+$/
  if (!regex.test(id)) {
   alert("Invalid Reactome resource identifier respect to pattern:\n^\\d+$");
   return false;
  }
 } else if (name.match("Taxonomy")) {
  value = form.rid.value;
  var regex = /^\d+$/
  if (!regex.test(id)) {
   alert("Invalid Taxonomy resource identifier respect to pattern:\n^\\d+$");
   return false;
  }
 } else if (name.match("UniProt")) {
  value = form.rid.value;
  var regex = /^([OPQ][0-9][A-Z0-9][A-Z0-9][A-Z0-9][0-9](_[\dA-Z]{1,5})?)$/
  if (!regex.test(id)) {
   alert("Invalid UniProt resource identifier respect to pattern:\n^([OPQ][0-9][A-Z0-9][A-Z0-9][A-Z0-9][0-9](_[\\dA-Z]{1,5})?)$");
   return false;
  }
 }
 return true;
};


// go_to_resource
function go_to_resource(form)
{
 var name = form.rnm.options[form.rnm.selectedIndex].value;
 if (name.match("BIND")) {
  open_window("http://www.bind.ca/");
 } else if (name.match("ChEBI")) {
  open_window("http://www.ebi.ac.uk/chebi/");
 } else if (name.match("EC code")) {
  open_window("http://www.ebi.ac.uk/IntEnz/");
 } else if (name.match("Ensembl")) {
  open_window("http://www.ensembl.org/");
 } else if (name.match("Gene Ontology")) {
  open_window("http://www.ebi.ac.uk/ego/");
 } else if (name.match("ICD10")) {
  open_window("http://www3.who.int/icd/vol1htm2003/fr-icd.htm");
 } else if (name.match("IntAct")) {
  open_window("http://www.ebi.ac.uk/intact");
 } else if (name.match("InterPro")) {
  open_window("http://www.ebi.ac.uk/interpro/");
 } else if (name.match("KEGG Pathway")) {
  open_window("http://www.genome.jp/kegg/pathway.html");
 } else if (name.match("KEGG Compound")) {
  open_window("http://www.genome.jp/kegg/ligand.html");
 } else if (name.match("KEGG Reaction")) {
  open_window("http://www.genome.jp/kegg/ligand.html");
 } else if (name.match("OMIM")) {
  open_window("http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=OMIM");
 } else if (name.match("PIRSF")) {
  open_window("http://pir.georgetown.edu/pirsf/");
 } else if (name.match("Reactome")) {
  open_window("http://www.reactome.org/");
 } else if (name.match("Taxonomy")) {
  open_window("http://www.ebi.ac.uk/newt/display");
 } else if (name.match("UniProt")) {
  open_window("http://www.uniprot.org/");
 }
};


// open_window
function open_window(url)
{
  open(url);
};


// validate_login
function validate_login()
{
 var f = document.forms[0];
 if (f.usn.value.length == 0) {
  alert("Username is required.");
  return false;
 }
 if (f.psw.value.length == 0) {
  alert("Password is required.");
  return false;
 }
 return true;
};


// open_graph_popup
function open_graph_popup(url)
{
  var popup = window.open(url,'graph','dependent=yes,menubar=no,toolbar=no,location=no,directories=no,scrollbars=yes,status=yes,innerWidth=600,innerHeight=600');
  popup.focus();
};


// validate_cmtbug
function validate_cmtbug()
{
  var f = document.forms[0];
  if (f.des.value.length == 0)
  {
    alert("Description is required.");
    return false;
  }
  if (f.rep.value.length == 0)
  {
    alert("Reply to is required.");
    return false;
  }
  if (f.rep.value.indexOf("@") == -1)
  {
    alert("Reply to must contain '@'.");
    return false;
  }
  return true;
};


// validate_search
function validate_search()
{
  return true;
};


// go_to_resource
function go_to_resource(select)
{
 var name = select.options[select.selectedIndex].value;
 if (name.match("Publication")) {
  open_window("http://www.ncbi.nlm.nih.gov/PubMed/");
 } else if (name.match("BIND")) {
  open_window("http://www.bind.ca/");
 } else if (name.match("ChEBI")) {
  open_window("http://www.ebi.ac.uk/chebi/");
 } else if (name.match("EC code")) {
  open_window("http://www.ebi.ac.uk/IntEnz/");
 } else if (name.match("Ensembl")) {
  open_window("http://www.ensembl.org/");
 } else if (name.match("Gene Ontology")) {
  open_window("http://www.ebi.ac.uk/ego/");
 } else if (name.match("ICD10")) {
  open_window("http://www3.who.int/icd/vol1htm2003/fr-icd.htm");
 } else if (name.match("IntAct")) {
  open_window("http://www.ebi.ac.uk/intact");
 } else if (name.match("InterPro")) {
  open_window("http://www.ebi.ac.uk/interpro/");
 } else if (name.match("KEGG Pathway")) {
  open_window("http://www.genome.jp/kegg/pathway.html");
 } else if (name.match("KEGG Compound")) {
  open_window("http://www.genome.jp/kegg/ligand.html");
 } else if (name.match("KEGG Reaction")) {
  open_window("http://www.genome.jp/kegg/ligand.html");
 } else if (name.match("OMIM")) {
  open_window("http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=OMIM");
 } else if (name.match("PIRSF")) {
  open_window("http://pir.georgetown.edu/pirsf/");
 } else if (name.match("Reactome")) {
  open_window("http://www.reactome.org/");
 } else if (name.match("Taxonomy")) {
  open_window("http://www.ebi.ac.uk/newt/display");
 } else if (name.match("UniProt")) {
  open_window("http://www.uniprot.org/");
 }
};


// validate_submit
function validate_submit()
{
  var f = document.forms[0];
  if (f.eml.value.length == 0)
  {
    alert("Email is required.");
    return false;
  }
  if (f.eml.value.indexOf("@") == -1)
  {
    alert("Email must contain '@'.");
    return false;
  }
  if (f.fln.value.length == 0)
  {
    alert("Model file is required.");
    return false;
  }
  return true;
};


// validate_signin
function validate_signin(password)
{
  var f = document.forms[0];
  if (f.usn.value.length == 0)
  {
    alert("Username is required.");
    return false;
  }
  if (password == true)
  {
    if (f.psw.value.length == 0)
    {
      alert("Password is required.");
      return false;
    }
  }
  else
  {
    f.action = "signin.do?cmd=EMAIL:PASSWD";
  }
  return true;
};


// validate_comment
function validate_comment()
{
  var f = document.forms[0];
  if (f.cmt.value.length == 0)
  {
    alert("Curation comment is required.");
    return false;
  }
  return true;
};


// validate_filename
function validate_filename()
{
  var f = document.forms[0];
  if (f.fln.value.length == 0)
  {
    alert("Model file is required.");
    return false;
  }
  return true;
};


// validate_pub_id
function validate_pub_id()
{
  var f = document.forms[0];
  if (f.pid.value.length == 0)
  {
    alert("Publication ID is required.");
    return false;
  }
  return true;
};


// validate_pub_data
function validate_pub_data()
{
 var f = document.forms[0];
 if (f.jrn.value.length == 0
     && f.tit.value.length == 0
     && f.aut.value.length == 0
     && f.aff.value.length == 0
     && f.abs.value.length == 0) {
  alert("Please enter at least one publication data.");
  return false;
 }
 return true;
};


// validate_creator
function validate_creator()
{
 var f = document.forms[0];
 if (f.giv.value.length == 0) {
  alert("Given name is required.");
  return false;
 }
 if (f.fam.value.length == 0) {
  alert("Family name is required.");
  return false;
 }
 if (f.org.value.length == 0) {
  alert("Organisation is required.");
  return false;
 }
 if (f.eml.value.length == 0) {
  alert("Email is required.");
  return false;
 }
 if (f.eml.value.indexOf("@") == -1) {
  alert("Email must contain '@'.");
  return false;
 }
 return true;
};


var popup;


// open_popup
function open_popup(url)
{
  var popup = window.open(url,'biomodels_popup','dependent=yes,menubar=no,toolbar=no,location=no,directories=no,scrollbars=yes,status=yes,innerWidth=600,innerHeight=600');
  popup.focus();
};


// close_popup
function close_popup()
{
  //popup.close();
};


// set_resource_input_helper
function set_resource_input_helper(form)
{
 var value = form.rnm.options[form.rnm.selectedIndex].value;
 if (value.match("ChEBI")) {
  form.rac.value = "CHEBI:";
 } else if (value.match("EC code")) {
  form.rac.value = "EC ";
 } else if (value.match("Ensembl")) {
  form.rac.value = "ENS";
 } else if (value.match("Gene Ontology")) {
  form.rac.value = "GO:";
 } else if (value.match("IntAct")) {
  form.rac.value = "EBI-";
 } else if (value.match("InterPro")) {
  form.rac.value = "IPR";
 } else if (value.match("KEGG Compound")) {
  form.rac.value = "C";
 } else if (value.match("KEGG Reaction")) {
  form.rac.value = "R";
 } else if (value.match("PIRSF")) {
  form.rac.value = "SF";
 } else {
  form.rac.value = "";
 }
 form.rac.focus();
};


// validate_resource_input
function validate_resource_input(form)
{
 var name = form.rnm.options[form.rnm.selectedIndex].value;
 var input = form.rac.value;
 if (input.length == 0) {
  alert("Resource identifier is required.");
  return false;
 }
 if (name.match("BIND")) {
  var regex = /^\d+$/
  if (!regex.test(input)) {
   alert("Invalid BIND resource identifier respect to pattern:\n^\\d+$");
   return false;
  }
 } else if (name.match("ChEBI")) {
  var regex = /^CHEBI:\d{5}$/
  if (!regex.test(input)) {
   alert("Invalid ChEBI resource identifier respect to pattern:\n^CHEBI:\\d{5}$");
   return false;
  }
 } else if (name.match("EC code")) {
  var regex = /^EC (\d+|\d+\.(-|\d+)|\d+\.\d+\.(-|\d+)|\d+\.\d+\.\d+\.(-|\d+))$/
  if (!regex.test(input)) {
   alert("Invalid EC code resource identifier respect to pattern:\n^EC (\\d+|\\d+\\.(-|\\d+)|\\d+\\.\\d+\\.(-|\\d+)|\\d+\\.\\d+\\.\\d+\\.(-|\\d+))$");
   return false;
  }
 } else if (name.match("Ensembl")) {
  var regex = /^ENS\w{3}[FPTG]\d{11}$/
  if (!regex.test(input)) {
   alert("Invalid Ensembl resource identifier respect to pattern:\n^ENS\\w{3}[FPTG]\\d{11}$");
   return false;
  }
 } else if (name.match("Gene Ontology")) {
  var regex = /^GO:\d{7}$/
  if (!regex.test(input)) {
   alert("Invalid Gene Ontology resource identifier respect to pattern:\n^GO:\\d{7}$");
   return false;
  }
 } else if (name.match("ICD10")) {
  var regex = /^[A-Z]\d+(\.[-\d+])?$/
  if (!regex.test(input)) {
   alert("Invalid ICD10 resource identifier respect to pattern:\n^[A-Z]\\d+(\\.[-\\d+])?$");
   return false;
  }
 } else if (value.match("IntAct")) {
  var regex = /^EBI\-[0-9]+$/
  if (!regex.test(input)) {
   alert("Invalid IntAct resource identifier respect to pattern:\n^EBI\\-[0-9]+$");
   return false;
  }
 } else if (name.match("InterPro")) {
  var regex = /^IPR\d{6}$/
  if (!regex.test(input)) {
   alert("Invalid InterPro resource identifier respect to pattern:\n^IPR\\d{6}$");
   return false;
  }
 } else if (name.match("KEGG Pathway")) {
  var regex = /^\w{2,3}\d{5}$/
  if (!regex.test(input)) {
   alert("Invalid KEGG Pathway resource identifier respect to pattern:\n^\w{2,3}\d{5}$");
   return false;
  }
 } else if (name.match("KEGG Compound")) {
  var regex = /^C\d+$/
  if (!regex.test(input)) {
   alert("Invalid KEGG Compound resource identifier respect to pattern:\n^C\\d+$");
   return false;
  }
 } else if (name.match("KEGG Reaction")) {
  var regex = /^R\d+$/
  if (!regex.test(input)) {
   alert("Invalid KEGG Reaction resource identifier respect to pattern:\n^R\\d+$");
   return false;
  }
 } else if (name.match("OMIM")) {
  var regex = /^[*#+%^]?\d{6}$/
  if (!regex.test(input)) {
   alert("Invalid OMIM resource identifier respect to pattern:\n^[*#+%^]?\\d{6}$");
   return false;
  }
 } else if (name.match("PIRSF")) {
  var regex = /^SF\d{6}$/
  if (!regex.test(input)) {
   alert("Invalid PIRSF resource identifier respect to pattern:\n^SF\d{6}$");
   return false;
  }
 } else if (name.match("Reactome")) {
  var regex = /^\d+$/
  if (!regex.test(input)) {
   alert("Invalid Reactome resource identifier respect to pattern:\n^\\d+$");
   return false;
  }
 } else if (name.match("Taxonomy")) {
  var regex = /^\d+$/
  if (!regex.test(input)) {
   alert("Invalid Taxonomy resource identifier respect to pattern:\n^\\d+$");
   return false;
  }
 } else if (name.match("UniProt")) {
  var regex = /^([OPQ][0-9][A-Z0-9][A-Z0-9][A-Z0-9][0-9](_[\dA-Z]{1,5})?)$/
  if (!regex.test(input)) {
   alert("Invalid UniProt resource identifier respect to pattern:\n^([OPQ][0-9][A-Z0-9][A-Z0-9][A-Z0-9][0-9](_[\\dA-Z]{1,5})?)$");
   return false;
  }
 }
 return true;
};


// update_model_id
function update_model_id()
{
 var f = document.forms[0];
 var t = f.mids.options[f.mids.selectedIndex].text;
 f.mid.value = t.substring(0, 15);
};


// validate_user
function validate_user()
{
 var f = document.forms[0];
 if (f.giv.value.length == 0) {
  alert("Given name is required.");
  return false;
 }
 if (f.fam.value.length == 0) {
  alert("Family name is required.");
  return false;
 }
 if (f.org.value.length == 0) {
  alert("Organisation is required.");
  return false;
 }
 if (f.eml.value.length == 0) {
  alert("Email is required.");
  return false;
 }
 if (f.eml.value.indexOf("@") == -1) {
  alert("Email must contain '@'.");
  return false;
 }
 if (f.usn.value.length == 0) {
  alert("Username is required.");
  return false;
 }
 if (f.psw.value.length == 0) {
  alert("Password is required.");
  return false;
 }
 return true;
};


// confirmSubmit
function confirmSubmit()
{
  var agree=confirm("You are about to delete a term.\nThis operation can not be undone.\nAre you sure you wish to continue?");
  if (agree)
  {
    return true;
  }
  else
  {
    return false;
  }
}

