/*

  WebDesktop (c) Webware OÜ common utils

*/

// detect browser
browser_DOM         = (document.getElementById) ? 1 : 0;
browser_NS4         = (document.layers) ? 1 : 0;
browser_Konqueror   = (navigator.userAgent.indexOf("Konqueror") > -1) ? 1 : 0;
browser_Konqueror22 = (navigator.userAgent.indexOf("Konqueror 2.2") > -1 || navigator.userAgent.indexOf("Konqueror/2.2") > -1) ? 1 : 0;
browser_Opera       = (navigator.userAgent.indexOf("Opera") > -1) ? 1 : 0;
browser_Opera5      = (navigator.userAgent.indexOf("Opera 5") > -1 || navigator.userAgent.indexOf("Opera/5") > -1) ? 1 : 0;
browser_Opera6      = (navigator.userAgent.indexOf("Opera 6") > -1 || navigator.userAgent.indexOf("Opera/6") > -1) ? 1 : 0;
browser_Opera56     = browser_Opera5 || browser_Opera6;
browser_IE          = (navigator.userAgent.indexOf("MSIE") > -1) ? 1 : 0;
browser_IE          = browser_IE && !browser_Opera;
browser_IE5         = browser_IE && browser_DOM;
browser_IE4         = (document.all) ? 1 : 0;
browser_IE4         = browser_IE4 && browser_IE && !browser_DOM;

utils_layer_htmls = {};

fx_tmr=false;
fx_tmr_actionbut='save';

var zeros = '0000000000';

function padNumber(n,p)
{
    n = ''+n;

    if(n.length < p)
        return zeros.substr(0,p-n.length) + n;

    return n;
}

function setLayerValue(layer,attrib,value)
{
    if(document['all'])                 var cmd = 'document.all[\''+layer+'\'].'+attrib+'=value';
    else if(document['getElementById']) var cmd = 'document.getElementById(\''+layer+'\').'+attrib+'=value';
    else if(document['layers'])         var cmd = 'document.layers[\''+layer+'\'].'+attrib+'=value';
    else return false;

    eval(cmd);

    return true;
}

function getLayer(layer)
{
  if(document['all'])                 return document.all[layer];
  else if(document['layers'])         return document.layers[layer];
  else if(document['getElementById']) return document.getElementById(layer);
  else return null;
}

function getLayerValue(layer,attrib)
{
    if(document['all'])                 var cmd = 'document.all[\''+layer+'\'].'+attrib;
    else if(document['layers'])         var cmd = 'document.layers[\''+layer+'\'].'+attrib;
    else if(document['getElementById']) var cmd = 'document.getElementById(\''+layer+'\').'+attrib;
    else return false;

    return eval(cmd);
}

function showLayer(name)
{
    if(utils_layer_htmls[name])
        document.all[name].innerHTML=utils_layer_htmls[name];
}

function hideLayer(name)
{
    if(document.all[name].innerHTML)
    {
        utils_layer_htmls[name] = document.all[name].innerHTML;
        document.all[name].innerHTML = '';
    }
}

utils_expcol_register = {};

function registerExpColButton(name,img,exp_src,col_src,state)
{
    // true -> expanded, false -> collapsed
    utils_expcol_register[name] = [img,exp_src,col_src,state];

    if(state)
    {
        img.src=col_src;
        showLayer(name);
    }
    else
    {
        img.src=exp_src;
        hideLayer(name);
    }
}

function doExpCol(name)
{
    if(utils_expcol_register[name])
    {
        if(utils_expcol_register[name][3])
        {
            utils_expcol_register[name][0].src=utils_expcol_register[name][1];
            utils_expcol_register[name][3] = false;
            hideLayer(name);
        }
        else
        {
            utils_expcol_register[name][0].src=utils_expcol_register[name][2];
            utils_expcol_register[name][3] = true;
            showLayer(name);
        }
    }
}

if(!browser_IE)
{
    var wd_last_mouse_X = 0;
    var wd_last_mouse_Y = 0;

    window.captureEvents(Event.MouseMove);
    window.onmousemove = function (e)
    {
        wd_last_mouse_X = e.clientX;
        wd_last_mouse_Y = e.clientY;
    }
}

function open_shim(layer_name)
{
    var layer = document.getElementById(layer_name);
    if (!browser_IE || layer==null)
        return;

    var shim = document.getElementById('shim_'+layer_name);
    if (shim==null)
        shim = create_shim('shim_'+layer_name);

    if (layer.style.zIndex=="undefined" || layer.style.zIndex < 100)
        layer.style.zIndex = 100;

    shim.style.width = layer.offsetWidth+'px';
    shim.style.height = layer.offsetHeight+'px';
    shim.style.top = layer.style.top;
    shim.style.left = layer.style.left;
    shim.style.zIndex = layer.style.zIndex - 1;
    shim.style.position = "absolute";
    shim.style.display = "block";
}

function close_shim(layer_name)
{
    var shim = document.getElementById('shim_'+layer_name);
    if (shim!=null)
        shim.style.display = "none";
}

function create_shim(shim_name){
    try {
        var elem=document.createElement('iframe');
        elem.setAttribute('id',shim_name);
        elem.style.border='0px';
        elem.style.width='0px';
        elem.style.height='0px';
        elem.src='javascript:false';
        document.body.appendChild(elem);

        return elem;
    } catch(exception) {
        var iframeHTML='\<iframe id="'+shim_name+'" style="';
        iframeHTML+='border:0px;';
        iframeHTML+='width:0px;';
        iframeHTML+='height:0px;"';
        iframeHTML+=' src="javascript:false;"><\/iframe>';
        document.body.innerHTML+=iframeHTML;
        return document.getElementById(shim_name);
    }
}

function show_hint(text)
{
    text = replace_all(text,'\r','');
    text = replace_all(text,'\n',' ');

    var l = document.getElementById('hint_layer');

    if(browser_IE)
    {
        var cX = window.event.clientX;
        var cY = window.event.clientY;
    }
    else
    {
        var cX = wd_last_mouse_X;
        var cY = wd_last_mouse_Y;
    }

    setLayerValue('hint_layer','style.left',document.body.scrollLeft+cX+15);
    setLayerValue('hint_layer','style.top',document.body.scrollTop+cY);
    setLayerValue('hint_layer','style.zIndex',100);
    setLayerValue('hint_layer','innerHTML',text);
    setLayerValue('hint_layer','style.visibility','visible');

    open_shim('hint_layer');
}

function hide_hint()
{
    setLayerValue('hint_layer','style.visibility','hidden');
    close_shim('hint_layer');
}

function replace_all(s,old_value,new_value)
{
    while(true)
    {
        x = s.replace(old_value,new_value);

        if(x==s)
            break;
        else
            s = x;
    }

    return x;
}

function is_int(i)
{
    r = /^[0-9]+$/gi;
    return r.exec(''+i);
}

var popup_frame_default_size = 400;
var popup_frame_scroll_step  = 10000; // step way over normal for no scrolling ;)
var popup_frame_scroll_delay = 50;

function popup_frameset_object()
{
    if(browser_IE5)
    {
        if(opener)
            return opener.top.frame_content.exp_frameset
        else if(top.frame_content && top.frame_content.exp_frameset)
            return top.frame_content.exp_frameset;
        else
            return null;
    }
}

var win_popup_frame = null;

function popup_frame_object(noopen)
{
    if(browser_IE5)
    {
        if(opener)
            return opener.top.frame_content.frame_popup
        else if(top.frame_content && top.frame_content.frame_popup)
            return top.frame_content.frame_popup;
        else
            return null;
    }
    else if(win_popup_frame && win_popup_frame.name)
        return win_popup_frame;
    else if(window.opener)
    {
        win_popup_frame = window;
        return win_popup_frame;
    }
    else if(window.parent && window.parent.opener)
    {
        win_popup_frame = window.parent;
        return win_popup_frame;
    }
    else if(!noopen)
    {
        win_popup_frame = window.open('about:blank','winpopupframe','LEFT=50,TOP=50,WIDTH=800,HEIGHT=600,SCROLLBARS=YES,TOOLBAR=NO,RESIZABLE=YES');

        if(win_popup_frame)
        {
            win_popup_frame.focus();
            return win_popup_frame; 
        }
        else
            return null;
    }
    else if(opener)
        return window;
    else
        return null;
}

function set_popup_frameset_cols(tf_w,cf_w,pf_w)
{
    if(browser_IE5)
    {
        var cols = tf_w+','+cf_w+','+pf_w;
        popup_frameset_object().cols = cols;
    }
}

function show_scroll_popup_frame(tf_w,cf_w,pf_w,mx_w)
{
    /*
    * tf_w -> tree frame width
    * cf_w -> content frame width
    * pf_w -> popup frame width
    * mx_w -> popup frame max width
    */

    if(browser_IE5)
    {
        set_popup_frameset_cols(tf_w,cf_w,pf_w);

        pf_w += popup_frame_scroll_step;
        pf_w  = pf_w > mx_w?mx_w:pf_w;


        if(pf_w < mx_w)
        {
            tf_w_ch = is_int(tf_w)?tf_w:'\''+tf_w+'\'';
            cf_w_ch = is_int(cf_w)?cf_w:'\''+cf_w+'\'';
            pf_w_ch = is_int(pf_w)?pf_w:'\''+pf_w+'\'';

            setTimeout('show_scroll_popup_frame('+tf_w_ch+','+cf_w_ch+','+pf_w_ch+','+mx_w+')',popup_frame_scroll_delay);
        }
        else
        {
            set_popup_frameset_cols(tf_w,cf_w,pf_w);
        }
    }
}

function webdk_date_set(form_name,field_name,year,month,day)
{
    document[form_name][field_name].value = webdk_js_fmt_date_from_iso(year+'-'+month+'-'+day);

    document[form_name][field_name+'_year'].value  = year;
    document[form_name][field_name+'_month'].value = month;
    document[form_name][field_name+'_day'].value   = day;

//    try{ document[form_name][field_name].focus(); }
//    catch(e){}

    if(document[form_name][field_name].onchange)
        document[form_name][field_name].onchange(null);
}

function show_popup_frame(mx_w)
{
    if((browser_IE5 && !popup_frameset_object()) || !(pfo=popup_frame_object()))
        return false;

    mx_w = mx_w?mx_w:popup_frame_default_size;

    if(browser_IE5)
    {
        var arr = popup_frameset_object().cols.split(',');
        if(arr.length==3)
        {
            var tf_w = arr[0];
            var cf_w = arr[1];
            var pf_w = parseInt(arr[2]);

            if(!isNaN(mx_w))
            {
                show_scroll_popup_frame(tf_w,cf_w,pf_w,mx_w);
            }
        }
    }
    else
        pfo.focus();
}

function hide_scroll_popup_frame(tf_w,cf_w,pf_w)
{
    /*
    * tf_w -> tree frame width
    * cf_w -> content frame width
    * pf_w -> popup frame width
    */

    if((browser_IE5 && !popup_frameset_object()) || !(pfo=popup_frame_object()))
        return false;

    if(browser_IE5)
    {
        set_popup_frameset_cols(tf_w,cf_w,pf_w);

        pf_w -= popup_frame_scroll_step;
        pf_w  = pf_w < 0?0:pf_w;


        if(pf_w > 0)
        {
            tf_w_ch = is_int(tf_w)?tf_w:'\''+tf_w+'\'';
            cf_w_ch = is_int(cf_w)?cf_w:'\''+cf_w+'\'';
            pf_w_ch = is_int(pf_w)?pf_w:'\''+pf_w+'\'';

            setTimeout('hide_scroll_popup_frame('+tf_w_ch+','+cf_w_ch+','+pf_w_ch+')',popup_frame_scroll_delay);
        }
        else
            set_popup_frameset_cols(tf_w,cf_w,pf_w);
    }
    else
        pfo.close();
}

function hide_popup_frame()
{
    if(browser_IE5)
    {
        var arr = popup_frameset_object().cols.split(',');

        if(arr.length==3)
        {
            var tf_w = arr[0];
            var cf_w = arr[1];
            var pf_w = parseInt(arr[2]);

            hide_scroll_popup_frame(tf_w,cf_w,pf_w);
        }
    }
    else if(pfo=popup_frame_object(true))
        pfo.close();
}

function load_and_show_popup_frame(url,force,mx_w)
{
    if((browser_IE5 && !popup_frameset_object()) || !(pfo=popup_frame_object()))
        return false;

    if(pfo.document.location.href!=url || force)
        pfo.document.location.href=url;

    show_popup_frame(mx_w);
}

function create_callback(func)
{
    this.args = arguments;
    this.func = func;

    return this;
}

function set_callback(cb)
{
    top.cb = cb;
}


function call_callback()
{
    if(browser_IE5)
    {
        if(top.cb)
        {
            top.cb.func(arguments);
            top.cb = null;
        }
    }
    else if(window.parent.opener && window.parent.opener.top.cb)
    {
            window.parent.opener.top.cb.func(arguments);
            window.parent.opener.top.cb = null;
    }
}

function cb_set_text_field_value(cb_args)
{
    var d = cb_args[0];
    var form_name  = this.args[1];
    var field_name = this.args[2];

    document[form_name][field_name].value = d;
}

function cb_set_date_field_value(cb_args)
{
    var dt = cb_args[0];
    var y  = cb_args[1];
    var m  = cb_args[2];
    var d  = cb_args[3];

    var form_name  = this.args[1];
    var field_name = this.args[2];

    document[form_name][field_name].value          = dt;
    document[form_name][field_name+'_year'].value  = y;
    document[form_name][field_name+'_month'].value = m;
    document[form_name][field_name+'_day'].value   = d;

    if(document[form_name][field_name].onchange)
        document[form_name][field_name].onchange(null);
}

function cb_set_text_hidden_field_value(cb_args)
{
    if(!cb_args)
        return true;

    var text_value = cb_args[0];
    var hidd_value = cb_args[1];

    var form_name       = this.args[1];
    var text_field_name = this.args[2];
    var hidd_field_name = this.args[3];
    var text_field = document[form_name][text_field_name];
    var hidd_field = document[form_name][hidd_field_name];

    text_field.value = text_value;
    hidd_field.value = hidd_value;

    if(text_field.onchange)
       text_field.onchange(null);
}

function webdk_debug_form(f)
{
    //
    var w = window.open('about:blank',
                        '_blank',
                        'LEFT=50,TOP=50,WIDTH=800,HEIGHT=600,SCROLLBARS=YES,TOOLBAR=NO,RESIZABLE=YES');

    w.focus();

    var d = w.document;

    d.write('<h1>Form JS debug:</h1>');

    d.write('<table border="1" cellspacing="0" cellpadding="2">');

    d.write('<tr><th nowrap>Name:</th><td nowrap>'+f.name+'</td>');
    d.write('<tr><th nowrap colspan="2" align="left">Elements ('+f.elements.length+'):</th></tr><tr><td nowrap colspan="2"><table border="1" cellspacing="0" cellpadding="2" width="100%"><tr><th nowrap>Nr.</th><th nowrap>Name</th><th nowrap>Type</th></tr>');

    // elements
    for(var i=0;i<f.elements.length;i++)
    {
        var e = f.elements[i];

        var name = e.name.length?e.name:'&nbsp;';
        var type = e.type.length?e.type:'&nbsp;';

        d.write('<tr><td nowrap align="right">'+(i+1)+'.</td><td nowrap>'+name+'</td><td nowrap>'+type+'</td></tr>');
    }

    //
    d.write('</table></td></tr>');

    d.write('</table>');
}

//-------------------------------------
var currentX = currentY = 0;
var wEl = null;

function itoa(str){return parseInt(str,10);}

function NZ(P1,P2)
{
  if(P1) return P1;
  else return P2;
}

function NZ2(P1,P2)
{
	if(P1==undefined) return P2;
	return P1;
}

function str_left(str,n,add)
{
  if(str.length>n)
	{
		var x=str.length-n;
		res=str.substr(x);
		if(add && add.length<n)
		{
			res=add+str_left(res,n-add.length);
		}
		return res;
	}
	return str;
}

function GetEl(Doc,El,silent)
{
  try {return Doc.getElementById(El);}
  catch(e) {if(!silent) alert('Puudub element: '+El);}
}

function layerWrite(Doc,el,txt,silent) {
  if(!Doc) return ;
  var c=GetEl(Doc,el,silent);
  if(c) Doc.getElementById(el).innerHTML = txt;
  else {if(!silent) alert('Kriitiline viga: ei leia Layerit '+el);}
}

function visible(Doc,el,p,silent)
{
  var obj = GetEl(Doc,el,silent);
  visible2(obj,p);
}

function visible2(obj,p)
{
  if (!obj) return;
  if(p) obj.style.visibility='visible';
  else obj.style.visibility='hidden';
}

function grabEl(WiN_ID)
{
  if(WiN_ID) wEl=GetEl(document,WiN_ID);
  else wEl = GetEl(document,'PopUp');
  //alert(wEl.ID);
  wEl.style.pixelLeft = wEl.offsetLeft;
  wEl.style.pixelTop = wEl.offsetTop;
  currentX = (event.clientX + document.body.scrollLeft);
  currentY = (event.clientY + document.body.scrollTop);
  document.onmousemove = moveEl;
  document.onmouseup = dropEl;
  return false;
}

function moveEl()
{
    newX = (event.clientX + document.body.scrollLeft);
    newY = (event.clientY + document.body.scrollTop);
    distanceX = (newX - currentX);
    distanceY = (newY - currentY);
    currentX = newX;
    currentY = newY;
    wEl.style.pixelLeft += distanceX;
    wEl.style.pixelTop += distanceY;
    return false;
}

function dropEl()
{
  document.onmousemove = document.onmouseup = null;
  wEl = null;
  return false;
}

function ReplaceInSTR(str,mis,millega)
{
 var oStr;
 do{
   oStr=str; str=str.replace(mis,millega); 
  }while (oStr!=str);
  return str;
}


function SetHiddenDate(field)
{
      var arr = field.value.split('.');

      if(arr.length==3)
      {
          field.form[field.name+'_day'].value = arr[0];
          field.form[field.name+'_month'].value = arr[1];
          field.form[field.name+'_year'].value  = arr[2];
      }
}

//// Kontrollimise funx //////////////////////////////////////////////
function DoCheck(type,field,label)
{
  if(type==1) res=isFloat(field.value);
  else if(type==2) res=isDate(field.value);
  else if(type==3)
  {
    /*res=isInList(field,false,recheck,label);
    if(res==undefined)
    {
      document.DoCheck_type=type;
      document.DoCheck_field=field;
      document.DoCheck_label=label;
      document.DoCheck_PageID=PageID;
      document.DoCheck_VFunx=VFunx;
      document.DoCheck_FieldName=field.name;
      document.DoCheck_field2name=field2name;
      _p._CantLeaveControl=field;
      _p._CantLeaveChecked=1;
      _p._CantLeaveControlTo=document.GlobalFocusCtrl;
      Engine.WaitExec--;
      if(document.FocusLevel!=50)
      {
        document.chk_field=field;
        setTimeout(TO_FocusField,5)
      };
      return false;
    }
    else if(field2name && field.Ctl_PopUpID)
    {
      var field2=GetEl(document,field2name);
      if(field2)
      {
        field2.value=field.value;
        field2.Ctl_PopUpID=field.Ctl_PopUpID;
        this.isInList(field2,true,recheck,label);
      }
    }
    if(_p._CantLeaveControlTo)
    {
      if(res)
      {
        document.chk_field=_p._CantLeaveControlTo;
        setTimeout(TO_FocusField,5)
      }
      _p._CantLeaveControlTo=null;
    }*/
  }
  if(!res)
  {
    alert("Vigane sisestus vÃ¤ljal "+label);
		document.FocusField=field;
		setTimeout("if(document.FocusField) document.FocusField.focus();document.FocusField=null",5);
  }
  if(res && type == 2)
  {
      field.value = this.convertDate(field.value);
      SetHiddenDate(field);
  }
  return res;
}

function isDate(x)
{
  if (!x || x=='') return true;
  x=x.replace(/(^)([1-9])([\.\/\-\,])/,'0$2.');
  x=x.replace(/([\.\/\-\,])([1-9])([\.\/\-\,])/,'.0$2.');
  x=ReplaceInSTR(x,/[\.\/\-\,]/,'');
  if (x.length < 6 || x.length > 10) return false;
  var day, month, year;
  day = x.substring(0,2);
  month = x.substring(2,4);
  year  = x.substring(4,x.length);
  if(!isInt(day) || !isInt(month) || !isInt(year)) return false;
  day=itoa(day); month=itoa(month);year=itoa(year);
  if (year > 99 && year <1000) return false;
  if (year < 100) year+= 2000;
  var monthdays = [31,29,31,30,31,30,31,31,30,31,30,31];
  if (year < 0 || year > 2999 || month < 1 || month > 12 || day < 1 || day > monthdays[month-1]) return false;
  if (day > 28 && month == 2 && year % 4 != 0) return false;
  return true;
}

// converts date to EST format. does not check correctness of the input string
function convertDate(x)
{
  if (!x || x=='') return '';
  if (x.length < 6 || x.length > 10) return x;
  x=x.replace(/(^)([1-9])([\.\/\-\,])/,'0$2.');
  x=x.replace(/([\.\/\-\,])([1-9])([\.\/\-\,])/,'.0$2.');
  x=ReplaceInSTR(x,/[\.\/\-\,]/,'');
  var day, month, year;
  day = x.substring(0,2).replace(/^ /,'0');
  month = x.substring(2,4).replace(/^ /,'0');
  year  = itoa(x.substring(4,x.length));
  if (year<1000) year= 2000+year;
  var fixedx = day + "." + month + "." + year.toString();
  return fixedx;
}

function isInt(x)
{
  var i=itoa(x);
  var s=x.toString();
  s=s.replace(/^[0| ]*/,'');
  if (s=='' || i.toString()==s) return true;
  return false;
}

function isCur(x)
{
  if(!x) return true;
  var a=itoa(x);
  if (x=='' || a.toString()==x) return true;
  if(x.indexOf('.')>0)
  {
    var y='1'+x.substring(x.indexOf('.')+1,x.length);
    var b=itoa(y);
    if (b>1000) return false;
    if (b.toString()==y) return true;
  }
  return false;
}

function isFloat(x)
{
  var f=parseFloat(x);
  var s=x.toString();
  if (s.indexOf('.') > 0) while(s.charAt(s.length-1)=='0') s=s.substr(0,s.length-1);
  if (s.charAt(s.length-1)=='.') s=s.substr(0,s.length-1);
  if(s=='' || f.toString()==s) return true;
  if(f.toString()+'.0'==s) return true;
  return false;
}

// dictionary object
function new_dict()
{
    this.keys        = new Array();
    this.getKeys     = function (){ return this.keys; }
    this.getKeyCount = function (){ return this.keys.length; }

    this.has_keys = {};
    this.hasKey   = function (key){ return this.has_keys[key]; }

    this.values = {};

    this.set = function (key,value)
    {
        if(!this.hasKey(key))
        {
            this.has_keys[key]          = true;
            this.keys[this.keys.length] = key;
        }

        this.values[key] = value;
    }

    this.get    = function (key)
    {
        return this.values[key];
    }

    this.remove = function (key)
    {
        if(this.hasKey(key))
        {
            for(var i=0;i<this.keys.length;i++)
            {
                if(this.keys[i]==key)
                {
                    delete(this.keys[i]);
                    break;
                }
            }

            delete(this.has_keys[key]);
            delete(this.values[key]);
        }
    }

    return this;
}

//
function set_tags_properties(tag,p,value) {
    if(!document['all'])
        return false;

    var tag_upper = tag.toString().toUpperCase();
    var tags = document.all.tags(tag_upper); // IE only

    for (var i=0;i<tags.length; i++)
        set_property(tags(i),p,value);
}

function set_property(obj,p,value) {
    if (!obj) return false;
    return eval("obj." + p + " = " + " value ");
}

// MUSEL
// -- Webdesktop Multiple User SelectionBox functions --
function webdk_musb_deselect_empty(sbox)
{
		for(var i=0;i<sbox.options.length;i++)
		{
				if(sbox.options[i].selected && !sbox.options[i].value)
						sbox.options[i].selected = false;
		}

		return true;
}

function webdk_musb_select_all(sbox)
{
		for(var i=0;i<sbox.options.length;i++)
		{
				if(sbox.options[i].value && !sbox.options[i].selected)
						sbox.options[i].selected = true;
		}

		return true;
}

function webdk_musb_move_selected(name,src,tgt,src_is_sel)
{
		var emt = tgt.options[tgt.options.length-1];
		tgt.options[tgt.options.length-1] = null;

		for(var i=0;i<src.options.length;i++)
		{
				if(src.options[i].selected && src.options[i].value)
				{
						value = src.options[i].value;

						if(!__webdk_musb_selected[name])
								__webdk_musb_selected[name] = {};

						// selection stuff
						if(src_is_sel)
						{
								// source is a selection box
								__webdk_musb_selected[name][value] = 0;
						}
						else
						{
								// source is a all users box (non-selected)
								__webdk_musb_selected[name][value] = 1;
						}

						tgt.options[tgt.options.length] = new Option(src.options[i].text,src.options[i].value,false,true);
						src.options[i]                  = null;
						i--;
				}
		}

		tgt.options[tgt.options.length] = emt;
}

function webdk_musb_clear_users(sbox)
{
		sel = {};

		while(sbox.options.length > 0)
		{
				if(sbox.options[0].selected)
						sel[sbox.options[0].value] = true;

				sbox.options[0] = null;
		}

		return sel;
}

function webdk_musb_clear_all(sbox)
{
		var emt = sbox.options[sbox.options.length-1];

		// clear all users (empty selection box, but leave last / empty selection)
		while(sbox.options.length > 0)
				sbox.options[0] = null;

		return emt;
}

function webdk_musb_match_filter(value,filter,mode)
{
    if(mode == 'ST')
        return (value.indexOf(filter) == 0);
    else
        return (value.indexOf(filter) >= 0);
}

function webdk_lower(value)
{
    value = value.toLowerCase();
    return value;
}

function webdk_musb_lower(value)
{
    return webdk_lower(value);
}

function webdk_musb_select_group(f,name,group)
{
		// f -> form
		// get group box
		var grp_sbox_name = name + '_group';

		var grp_sbox = f[grp_sbox_name];

    if(!grp_sbox)
				return false;

     // select group with specified id
     var grp_found = false;

     for(var i=0;i<grp_sbox.options.length;i++)
     {
         if(grp_sbox.options[i].value == group)
         {
             grp_sbox.selectedIndex = i;
             grp_found = true;
             break;
         }
     }

     if(!grp_found)
         return false;

    // get all users box
    var all_users_box = f[name+'_all_users'];

    if(!all_users_box)
        return false;

     // get filter box
     var flt_box = f[name+'_filter'];

     if(!flt_box)
         var filter = '';
     else
         var filter = flt_box.value;
     
     // update boxes
     webdk_musb_refill_all(name,all_users_box,filter,group);
}

function webdk_musb_refill_all(name,sbox,filter,group)
{
		var emt = webdk_musb_clear_all(sbox);

		var flt = (filter == null?null:webdk_musb_lower(filter));
                var flt_mode = (__webdk_musb_options[name]['fm']?__webdk_musb_options[name]['fm']:null);

		// add users
		for(var i=0;i<webdk_musb_users.length;i++)
		{
		    id          = webdk_musb_users[i][0];
		    uname       = webdk_musb_users[i][1];
		    uname_lower = webdk_musb_users[i][2];
		    groups      = webdk_musb_users[i][3];
		    is_group    = webdk_musb_users[i][4];

		    // check if selected
		    if(__webdk_musb_selected[name] && __webdk_musb_selected[name][id])
				    continue;

		    // check name filter
		    if(flt && !webdk_musb_match_filter(uname_lower,flt,flt_mode))
				    continue;

		    // check group filter
		    if(group && !groups[group])
				    continue;

		    // check group restriction
		    if(is_group && __webdk_musb_options[name]['sg_gids'] &&
		       !__webdk_musb_options[name]['sg_gids'][id])
			continue;

		    // check user group restriction
		    if(!is_group && __webdk_musb_options[name]['su_gids'])
		    {
			var has_any = false;

			// check if this user has any su_gid group
			for(gid in __webdk_musb_options[name]['su_gids'])
			{
			    if(groups[gid])
			    {
				has_any = true;
				break;
			    }
			}

			if(!has_any)
			    continue;
		    }

		    sbox[sbox.length] = new Option(uname,id,false,false);
		}

		sbox[sbox.length] = emt;
}


