function trim(val){
  while(true){
    if(val.charAt(0) == " "){
      val=val.substring(1,val.length);
    }
    else{
      break;
    }
  }
  while(true){
    if(val.charAt(val.length-1) == " "){
      val=val.substring(0,val.length-1);
    }
    else{
      break;
    }
  }
  return val;
}

/** prepare JS variable name from the source.
 *  replace all symbols that not in range [a-zA-Z0-9_$] with '_'
 *  if the first symbol is digit, add '_' before
 *  see also .java: toJavaName()
 * @param src
 * @return
 */
function toJavaName(src){
  if(src==null||src.length==0)
    return '_';
  var result='';
  var ch=src.charAt(0);
  if(ch>='0'&&ch<='9')
    result+='_';
  for(var i=0;i<src.length; i++){
    ch=src.charAt(i);
    if(ch>='0'&&ch<='9')
      result+=ch;
    else
    if(ch>='a'&&ch<='z')
      result+=ch;
    else
    if(ch>='A'&&ch<='Z')
      result+=ch;
    else
    if(ch=='_'||ch=='$')
      result+=ch;
    else
      result+='_';
  }
  return result;
}


/** Rebuilds target Select with sub-groups when main group is changed.
  Requires set of .java - generated arrays StringUtils.buildJSIdsNameArrays
  See seminar_edit.xml for an example
  @param target       document.form.select
  @param prefix       same as in StringUtils.buildJSIdsNameArrays
  @param group_id     new group_id
  @param selected_id  this item is selected, if any; not supported multiple items!
  @params def_name    name of the first item, if required (like '--select something-')
  @params def_id      id of the first item, if required, it will be selected if no other items are
*/
function buildOptionsForGroup(target,prefix,group_id,selected_id,def_name,def_id){
  var is_selected=0;
  for(var i=target.length-1;i>=0;i--)
    target.options[i]=null;
  var cnt=0;
  if(def_name!=null && def_id!=null){
    target.options[cnt++]=new Option(def_name,def_id,false,false);
  }

  try{
    var name=toJavaName(prefix+group_id);
    var ids=eval(name+'_ids');
    var names=eval(name+'_names');
    for(var i=0;i<ids.length;i++){
      var sel=false;
      if(ids[i]==selected_id)
        is_selected=cnt;
      target.options[cnt++]=new Option(names[i],ids[i],false,false);
    }
  }catch(e){}
  target.selectedIndex=is_selected;
}

// Created by ivank@
function PM_selectOption(id, val){
  if(!id || !val){
    return;
  }
  var selEl = document.getElementById(id);
  if(!selEl){
    selEl  = document.getElementsByName(name)[0];
  }
  for(var i=0; i < selEl.options.length ;i++){
    var opt = selEl.options[i];
    opt.selected = (val==opt.value);
  }
}

function PM_getSelectOptionValue(id){
  if(!id){
    return null;
  }
  var selEl = document.getElementById(id);
  for(var i=0; i < selEl.options.length ;i++){
    var opt = selEl.options[i];
    if(opt.selected){
      return opt.value;
    }
  }
  return null;
}


// Created by ivank@
function PM_selectRadio(name, val, defaultValue){
  var radios = document.getElementsByName(name);
  var nothingSelected = true;
  for(var i=0; i < radios.length ;i++){
    if(radios[i].value == val){
      radios[i].checked = true;
      nothingSelected = false;
    }else{
      radios[i].checked = false;
    }
  }
  if(defaultValue && nothingSelected && radios && radios.length>1){
    PM_selectRadio(name, defaultValue);
  }
}

