/*admin.js - all javascript code from administration part goes here*/

/*-----------------------------------------------------------------*/
/*view an object
  type     - type of object to be viewd
*/  
function ViewObj(id, type, user){
//  location.replace("<%HR::Browser::JFunction::obj_click()%>&obj_id="+id+"&type="+type);
  if(user == 'Administrator'){
    location.replace("/cgi/admin/admin.cgi?action=obj_click&obj_id="+id+"&type="+type);
  }else{
    location.replace("/cgi/browser.cgi?action=obj_click&obj_id="+id+"&type="+type);
  }  
}


/*-----------------------------------------------------------------*/
/*display add form for a new object
  new_type     - type of object to be added
  add_type - type of add: new/existing 
*/  
 function AddObjForm(id, type, new_type, add_type, user){
  if(type == null){
    var select = document.navbar.add_obj;
    var new_type = "";
  
    for(var i=0; i<select.options.length; i++){
      if(select.options[i].selected){
        new_type = select.options[i].value;
      }
    }
  }  
  
//  location.replace("<%HR::Browser::JFunction::obj_add_form()%>&obj_id="+id+"&type="+type+"&new_type="+new_type+"&add_type="+add_type);
  if(user == 'Administrator'){
    location.replace("/cgi/admin/admin.cgi?action=obj_add_form&obj_id="+id+"&type="+type+"&new_type="+new_type+"&add_type="+add_type);
  }else{
    location.replace("/cgi/browser.cgi?action=obj_add_form&obj_id="+id+"&type="+type+"&new_type="+new_type+"&add_type="+add_type);
  }  
}


/*-----------------------------------------------------------------*/
/*add a new object*/  
function AddObj(child_id, father_id, child_name, child_lang, child_is_valid, child_nb_objs, child_order){
  if(parent.CAN_UPDATE){
    parent.frames[parent.LEFT_FRAME_ID].document.open();
    parent.frames[parent.LEFT_FRAME_ID].document.writeln ('<HTML><BODY BGCOLOR="#FFFFFF"><H2><BLINK>Updating info...</BLINK></H2></BODY></HTML>');
    parent.frames[parent.LEFT_FRAME_ID].document.close();
	parent.tree.addNode(new parent.LoadedNode(child_id, father_id, child_name, child_lang, child_is_valid, child_nb_objs, child_order));
	parent.frames[parent.LEFT_FRAME_ID].document.open();
	parent.frames[parent.LEFT_FRAME_ID].document.writeln(parent.tree.toHtml());
	parent.frames[parent.LEFT_FRAME_ID].document.close();
  }
  parent.CAN_UPDATE = 0;
}


/*-----------------------------------------------------------------*/
/*modify some object*/  
function ModObj(id, father_id, name, lang, is_valid, nb_objs, order){
  if(parent.CAN_UPDATE){
    var modified_obj_id   = id;
  	var obj = parent.tree.lookup (modified_obj_id);
  	
	obj.setName(name);
	obj.setLang(lang);
	obj.setValid(is_valid);
	obj.setNumberOfObjs(nb_objs);
	obj.setOrder(order);

	parent.frames[parent.LEFT_FRAME_ID].document.open();
	parent.frames[parent.LEFT_FRAME_ID].document.writeln (parent.tree.toHtml());
	parent.frames[parent.LEFT_FRAME_ID].document.close()
  }
  parent.CAN_UPDATE = 0;
}


/*-----------------------------------------------------------------*/
/*delete object*/  
function DelObj(old_id){
  if(parent.CAN_UPDATE){
  	var old_node = parent.tree.lookup (old_id);
  	parent.tree.delNode(old_node);
  	
  	parent.frames[parent.LEFT_FRAME_ID].document.open();
  	parent.frames[parent.LEFT_FRAME_ID].document.writeln(parent.tree.toHtml());
  	parent.frames[parent.LEFT_FRAME_ID].document.close();
  }
  parent.CAN_UPDATE = 0;
}


/*-----------------------------------------------------------------*/
/*move object*/
function MoveObj(node_id, node_from_id, node_to_id, nb_objs, load_node_info){
  if(parent.CAN_UPDATE){
	var node    = parent.tree.lookup(node_id);
	var node_to = parent.tree.lookup(node_to_id);

	var node_from_id = node.getFatherId();
	var node_from    = parent.tree.lookup(node_from_id);

	var error_flag = false;
	var error      = "Software error:\n";
	error     += "---------------\n";

	if (node == null || node_from == null || node_to == null) error_flag = true;
	if (node == null)      error += "  + the node to move does not exist\n";
	if (node_from == null) error += "  + the original father node does not seem to exist\n";
	if (node_to   == null) error += "  + the target father node does not seem to exist\n";

	if(error_flag) alert (error);
	else{
	  if(!node_to.isLoaded()){
		parent.tree.delNode (node_to);
		parent.tree.addNode(new parent.LoadedNode(node_to.getId(), node_to.getFatherId(), node_to.getName(), node_to.getLang(), node_to.IsValid, node_to.getNbObjs(), 1));
        eval(load_node_info)
	  }
	}

	parent.tree.delNode(node);
	node.setFatherId(node_to_id);
	parent.tree.addNode(node);


	// Now update number of objects
	var old_id = node_from_id;
	var new_id = node_to_id;
	var old_node = parent.tree.lookup(old_id);
	var new_node = parent.tree.lookup(new_id);

	// goes up in the tree, decreasing objs counts by one from the old node
	var fatherid = old_node.getFatherId();
	while(true){
      if(old_node.getNumberOfObjs() != null) 
        old_node.setNumberOfObjs(old_node.getNumberOfObjs() - nb_objs -1);
      if(fatherid == old_id || old_id==1) break;
      
      old_id   = fatherid;
      old_node = parent.tree.lookup (old_id);
      fatherid = old_node.getFatherId();
	}

	// goes up in the tree, increasing objs counts by one from the new node
	fatherid = new_node.getFatherId();
	while(true){
	  if (new_node.getNumberOfObjs() != null) 
	    new_node.setNumberOfObjs(new_node.getNumberOfObjs() + nb_objs + 1);
	  if (fatherid == new_id || new_id==1) break;

	  new_id   = fatherid;
	  new_node = parent.tree.lookup (new_id);
	  fatherid = new_node.getFatherId();
	}

	// redisplays this info
	parent.draw_tree();
  }
}


/*-----------------------------------------------------------------*/
/*duplicate an object*/  
function DupObj(orig_ids, dup_ids, to_ids){
  if(parent.CAN_UPDATE){
    for(var i=0; i<orig_ids.length; i++){
      var origNode = parent.tree.lookup(orig_ids[i]);
      for(var j=0; j<to_ids.length; j++){
        parent.tree.addNode(new parent.LoadedNode(dup_ids[i*to_ids.length+j], to_ids[j], origNode.getName()+"_dupe", origNode.getLang(), origNode.isValid, origNode.getNumberOfObjs(), origNode.getOrder()));
      }  
    }  
	
	parent.frames[parent.LEFT_FRAME_ID].document.open();
	parent.frames[parent.LEFT_FRAME_ID].document.writeln(parent.tree.toHtml());
	parent.frames[parent.LEFT_FRAME_ID].document.close();
  }
  parent.CAN_UPDATE = 0;
}


/*-----------------------------------------------------------------*/
/*preview some object's page depending on selected language*/  
function PreviewObj(id, type, lang){
  if(lang!=0){
    window.open("/cgi/page.cgi?d=1&id="+id+"&type="+type+"&lang="+lang);
  }  
}


/*-----------------------------------------------------------------*/
/*build object with selected option*/
function BuildObj(id, father_id, type, opts, user){
//  location.replace("<%HR::Browser::JFunction::obj_build()%>&obj_id="+id+"&father_id="+father_id+"&type="+type+"&opts="+opts);
  if(user == 'Administrator'){
    location.replace("/cgi/admin/admin.cgi?action=build&obj_id="+id+"&father_id="+father_id+"&type="+type+"&opts="+opts);
  }else{
    location.replace("/cgi/browser.cgi?action=build&obj_id="+id+"&father_id="+father_id+"&type="+type+"&opts="+opts);
  }  
}


/*on checking 'allbox' checkbox => all checkboxes are checked (the same is for uncheck)*/
/*-----------------------------------------------------------------*/
function CheckAll(form, allbox){
  var val=form.allbox.checked;
  for (var i=0;i<form.elements.length;i++){
    var e = form.elements[i];
    if (e.name != 'allbox') e.checked = val;
  }
}


/*-----------------------------------------------------------------*/
function popup(mylink, windowname){
  if(!window.focus)return true;
    var href;
    if(typeof(mylink) == 'string')
    href=mylink;
  else
   href=mylink.href;
   
  window.open(href, windowname, 'width=600,height=500,scrollbars=yes');
  return false;
}


/*-----------------------------------------------------------------*/
function popup(mylink, windowname, width, height){
  if(!window.focus)return true;
    var href;
    if(typeof(mylink) == 'string')
    href=mylink;
  else
   href=mylink.href;
   
  window.open(href, windowname, 'width='+width+',height='+height+',scrollbars=yes');
  return false;
}


/*on checking 'allbox' checkbox => all checkboxes are checked (the same is for uncheck)*/
/*-----------------------------------------------------------------*/
function VerifyForm(form, array){
  var arr = array;
  var msg = '';
  
  for (var i=0;i<arr.length;i++){
    var e = arr[i];
    if(e.type == 'select-one'){
      var selectedIndex = e.selectedIndex;
      if(selectedIndex<=0){
        msg+="Select object type and try again, please.\n"
      }
    }else if(e.type == 'checkbox'){
      if(e.checked){
        msg+="Select some object(s), please.\n"
      }
    }else if(typeof(e.type) == 'undefined'){
      var isChecked = false;
      for(i=0; i<=form.elements.length; i++){
        if(form.elements[i] != undefined){
          if(form.elements[i].type == 'checkbox'){
            if(form.elements[i].className == e){
              if(form.elements[i].checked){
                isChecked = true; break;
              }
            }
          }else if(form.elements[i].type == 'radio'){
            if(form.elements[i].className == e){
              if(form.elements[i].checked){
                isChecked = true; break;
              }
            }
          }  
        }
      }
      if(!isChecked){
        msg+="Select some object(s), please.\n"
      }
    }  
  }
  
  if(!msg){ return true;}else{alert(msg); return false;}
}


/*on checking 'allbox' checkbox => all checkboxes are checked (the same is for uncheck)*/
/*-----------------------------------------------------------------*/
function VerifyForm(form, array, alert_msg){
  var arr = array;
  var msg = '';
  
  for (var i=0;i<arr.length;i++){
    var e = arr[i];
    if(e.type == 'select-one'){
      var selectedIndex = e.selectedIndex;
      if(selectedIndex<=0){
        msg+="Select object type and try again, please.\n"
      }
    }else if(e.type == 'checkbox'){
      if(e.checked){
        msg+=alert_msg;
      }
    }else if(typeof(e.type) == 'undefined'){
      var isChecked = false;
      for(i=0; i<=form.elements.length; i++){
        if(form.elements[i] != undefined){
          if(form.elements[i].type == 'checkbox'){
            if(form.elements[i].className == e){
              if(form.elements[i].checked){
                isChecked = true; break;
              }
            }
          }else if(form.elements[i].type == 'radio'){
            if(form.elements[i].className == e){
              if(form.elements[i].checked){
                isChecked = true; break;
              }
            }
          }  
        }
      }
      if(!isChecked){
        msg+=alert_msg
      }
    }  
  }
  
  if(!msg){ return true;}else{alert(msg); return false;}
}


/*check fields that are not to be null and those ones that have some specific regex*/
/*-----------------------------------------------------------------*/
function verifyForm2(form, not_nullArr, regexArr, msg){
  var error=false;
  
  for(i=0; i<form.elements.length; i++){
    if(not_nullArr[form.elements[i].name]==1 && !form.elements[i].value){
      error = true; break;
    }else if(form.elements[i].value){
      if(regexArr[form.elements[i].name]!=null && form.elements[i].value.search(regexArr[form.elements[i].name])==-1){
        error = true; break;
      }
    }
  }

  if(error){alert(msg);return false;}else{return true;}
}


/*------------------------------------------------------------------*/
/*get HTML element by ID*/
function getElement(ID) {
  if(document.all) {
    return document.all[ID];
  }else{
    return document.getElementById(ID);
  }
}


/*----------------------------------------------------------*/
/*activates selected menu item and deactivates previously selected one*/
function activate_item(select_item, deselect_id, className){
  active_item = getElement(deselect_id);
  /*remove attributes from old item*/
  active_item.id = null;
  active_item.className = null;
  /*set attributes to newly selected item*/
  select_item.parentNode.id = deselect_id;
  select_item.parentNode.className = className;
}

