function rcube_list_widget(a,b){this.ENTER_KEY=13;this.DELETE_KEY=46;this.BACKSPACE_KEY=8;this.list=a?a:null;this.frame=null;this.rows=[];this.selection=[];this.rowcount=0;this.subject_col=-1;this.drag_active=this.dont_select=this.toggleselect=this.keyboard=this.draggable=this.multi_selecting=this.multiexpand=this.multiselect=this.shiftkey=false;this.shift_start=this.last_selected=0;this.focused=this.in_selection_before=false;this.drag_mouse_start=null;this.dblclick_time=600;this.row_init=function(){};
if(b&&typeof b=="object")for(var c in b)this[c]=b[c]}
rcube_list_widget.prototype={init:function(){if(this.list&&this.list.tBodies[0]){this.rows=[];this.rowcount=0;for(var a,b=0;b<this.list.tBodies[0].childNodes.length;b++){for(a=this.list.tBodies[0].childNodes[b];a&&a.nodeType!=1;){a=a.nextSibling;b++}this.init_row(a);this.rowcount++}this.frame=this.list.parentNode;if(this.keyboard){rcube_event.add_listener({event:bw.opera?"keypress":"keydown",object:this,method:"key_press"});rcube_event.add_listener({event:"keydown",object:this,method:"key_down"})}}},
init_row:function(a){if(a&&String(a.id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)){var b=this,c=RegExp.$1;a.uid=c;this.rows[c]={uid:c,id:a.id,obj:a};a.onmousedown=function(d){return b.drag_row(d,this.uid)};a.onmouseup=function(d){return b.click_row(d,this.uid)};if(document.all)a.onselectstart=function(){return false};this.row_init(this.rows[c])}},clear:function(a){this.list.insertBefore(document.createElement("tbody"),this.list.tBodies[0]);this.list.removeChild(this.list.tBodies[1]);this.rows=[];this.rowcount=
0;a&&this.clear_selection()},remove_row:function(a,b){if(this.rows[a].obj)this.rows[a].obj.style.display="none";b&&this.select_next();this.rows[a]=null;this.rowcount--},insert_row:function(a,b){var c=this.background?this.background:this.list.tBodies[0];b&&c.rows.length?c.insertBefore(a,c.firstChild):c.appendChild(a);this.init_row(a);this.rowcount++},focus:function(a){this.focused=true;for(var b=0;b<this.selection.length;b++){id=this.selection[b];this.rows[id]&&this.rows[id].obj&&$(this.rows[id].obj).addClass("selected").removeClass("unfocused")}if(a||
(a=window.event))rcube_event.cancel(a)},blur:function(){var a;this.focused=false;for(var b=0;b<this.selection.length;b++){a=this.selection[b];this.rows[a]&&this.rows[a].obj&&$(this.rows[a].obj).removeClass("selected").addClass("unfocused")}},drag_row:function(a,b){var c=rcube_event.get_target(a),d=c.tagName.toLowerCase();if(this.dont_select||c&&(d=="input"||d=="img"))return true;if(rcube_event.get_button(a)==2)return true;this.in_selection_before=this.in_selection(b)?b:false;if(!this.in_selection_before){c=
rcube_event.get_modifier(a);this.select_row(b,c,false)}if(this.draggable&&this.selection.length){this.drag_start=true;this.drag_mouse_start=rcube_event.get_mouse_pos(a);rcube_event.add_listener({event:"mousemove",object:this,method:"drag_mouse_move"});rcube_event.add_listener({event:"mouseup",object:this,method:"drag_mouse_up"});$("iframe").each(function(){$('<div class="iframe-dragdrop-fix"></div>').css({background:"#fff",width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",
opacity:"0.001",zIndex:1E3}).css($(this).offset()).appendTo("body")})}return false},click_row:function(a,b){var c=(new Date).getTime(),d=rcube_event.get_modifier(a),e=rcube_event.get_target(a),f=e.tagName.toLowerCase();if(e&&(f=="input"||f=="img"))return true;if(this.dont_select)return this.dont_select=false;e=c-this.rows[b].clicked<this.dblclick_time;!this.drag_active&&this.in_selection_before==b&&!e&&this.select_row(b,d,false);this.in_selection_before=this.drag_start=false;this.rows&&e&&this.in_selection(b)?
this.triggerEvent("dblclick"):this.triggerEvent("click");if(!this.drag_active){$("div.iframe-dragdrop-fix").each(function(){this.parentNode.removeChild(this)});rcube_event.cancel(a)}this.rows[b].clicked=c;return false},find_root:function(a){var b=this.rows[a];return b&&b.parent_uid?this.find_root(b.parent_uid):a},expand_row:function(a,b){b=this.rows[b];var c=rcube_event.get_target(a);a=rcube_event.get_modifier(a);this.dont_select=true;b.clicked=0;if(b.expanded){c.className="collapsed";a==CONTROL_KEY||
this.multiexpand?this.collapse_all(b):this.collapse(b)}else{c.className="expanded";a==CONTROL_KEY||this.multiexpand?this.expand_all(b):this.expand(b)}},collapse:function(a){a.expanded=false;this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded});var b=a.depth;a=a?a.obj.nextSibling:null;for(var c;a;){if(a.nodeType==1){if((c=this.rows[a.uid])&&c.depth<=b)break;$(a).hide();c.expanded=false;this.triggerEvent("expandcollapse",{uid:c.uid,expanded:c.expanded})}a=a.nextSibling}return false},expand:function(a){var b,
c,d;if(a){a.expanded=true;b=a.depth;c=a.obj.nextSibling;this.update_expando(a.uid,true);this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded})}else{c=this.list.tBodies[0].firstChild;d=b=0}for(;c;){if(c.nodeType==1){var e=this.rows[c.uid];if(e){if(a&&(!e.depth||e.depth<=b))break;if(e.parent_uid){var f=this.rows[e.parent_uid];if(f&&f.expanded){if(a&&f==a||d>=f.depth-1){d=f.depth;$(c).show();e.expanded=true;this.triggerEvent("expandcollapse",{uid:e.uid,expanded:e.expanded})}}else if(a&&
(!f||f.depth<=b))break}}}c=c.nextSibling}return false},collapse_all:function(a){var b,c,d;if(a){a.expanded=false;b=a.depth;c=a.obj.nextSibling;this.update_expando(a.uid);this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded});if(b&&this.multiexpand)return false}else{c=this.list.tBodies[0].firstChild;b=0}for(;c;){if(c.nodeType==1)if(d=this.rows[c.uid]){if(a&&(!d.depth||d.depth<=b))break;if(a||d.depth)$(c).hide();if(d.has_children){d.expanded=false;this.update_expando(d.uid);this.triggerEvent("expandcollapse",
{uid:d.uid,expanded:d.expanded})}}c=c.nextSibling}return false},expand_all:function(a){var b,c,d;if(a){a.expanded=true;b=a.depth;c=a.obj.nextSibling;this.update_expando(a.uid,true);this.triggerEvent("expandcollapse",{uid:a.uid,expanded:a.expanded})}else{c=this.list.tBodies[0].firstChild;b=0}for(;c;){if(c.nodeType==1)if(d=this.rows[c.uid]){if(a&&d.depth<=b)break;$(c).show();if(d.has_children){d.expanded=true;this.update_expando(d.uid,true);this.triggerEvent("expandcollapse",{uid:d.uid,expanded:d.expanded})}}c=
c.nextSibling}return false},update_expando:function(a,b){if(a=document.getElementById("rcmexpando"+a))a.className=b?"expanded":"collapsed"},get_next_row:function(){if(!this.rows)return false;var a=this.rows[this.last_selected];for(a=a?a.obj.nextSibling:null;a&&(a.nodeType!=1||a.style.display=="none");)a=a.nextSibling;return a},get_prev_row:function(){if(!this.rows)return false;var a=this.rows[this.last_selected];for(a=a?a.obj.previousSibling:null;a&&(a.nodeType!=1||a.style.display=="none");)a=a.previousSibling;
return a},get_first_row:function(){if(this.rowcount)for(var a=this.list.tBodies[0].rows,b=0;b<a.length-1;b++)if(a[b].id&&String(a[b].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)&&this.rows[RegExp.$1]!=null)return RegExp.$1;return null},get_last_row:function(){if(this.rowcount)for(var a=this.list.tBodies[0].rows,b=a.length-1;b>=0;b--)if(a[b].id&&String(a[b].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)&&this.rows[RegExp.$1]!=null)return RegExp.$1;return null},select_row:function(a,b,c){var d=this.selection.join(",");
this.multiselect||(b=0);if(!this.shift_start)this.shift_start=a;if(b){switch(b){case SHIFT_KEY:this.shift_select(a,false);break;case CONTROL_KEY:c||this.highlight_row(a,true);break;case CONTROL_SHIFT_KEY:this.shift_select(a,true);break;default:this.highlight_row(a,false);break}this.multi_selecting=true}else{this.shift_start=a;this.highlight_row(a,false);this.multi_selecting=false}this.selection.join(",")!=d&&this.triggerEvent("select");this.last_selected!=0&&this.rows[this.last_selected]&&$(this.rows[this.last_selected].obj).removeClass("focused");
if(this.toggleselect&&this.last_selected==a){this.clear_selection();a=null}else $(this.rows[a].obj).addClass("focused");if(!this.selection.length)this.shift_start=null;this.last_selected=a},select:function(a){this.select_row(a,false);this.scrollto(a)},select_next:function(){var a=this.get_next_row(),b=this.get_prev_row();(a=a?a:b)&&this.select_row(a.uid,false,false)},select_first:function(a){var b=this.get_first_row();if(b&&a){this.shift_select(b,a);this.triggerEvent("select");this.scrollto(b)}else b&&
this.select(b)},select_last:function(a){var b=this.get_last_row();if(b&&a){this.shift_select(b,a);this.triggerEvent("select");this.scrollto(b)}else b&&this.select(b)},select_childs:function(a){if(this.rows[a]&&this.rows[a].has_children){var b=this.rows[a].depth;for(a=this.rows[a].obj.nextSibling;a;){if(a.nodeType==1)if(r=this.rows[a.uid]){if(!r.depth||r.depth<=b)break;this.in_selection(r.uid)||this.select_row(r.uid,CONTROL_KEY)}a=a.nextSibling}}},shift_select:function(a,b){if(!this.rows[this.shift_start]||
!this.selection.length)this.shift_start=a;var c=this.rows[this.shift_start].obj.rowIndex,d=this.rows[a].obj.rowIndex;a=c<d?c:d;c=c>d?c:d;for(var e in this.rows)if(this.rows[e].obj.rowIndex>=a&&this.rows[e].obj.rowIndex<=c)this.in_selection(e)||this.highlight_row(e,true);else this.in_selection(e)&&!b&&this.highlight_row(e,true)},in_selection:function(a){for(var b in this.selection)if(this.selection[b]==a)return true;return false},select_all:function(a){if(!this.rows||!this.rows.length)return false;
var b=this.selection.join(",");this.selection=[];for(var c in this.rows)if(!a||this.rows[c]&&this.rows[c][a]==true){this.last_selected=c;this.highlight_row(c,true)}else this.rows[c]&&$(this.rows[c].obj).removeClass("selected").removeClass("unfocused");this.selection.join(",")!=b&&this.triggerEvent("select");this.focus();return true},invert_selection:function(){if(!this.rows||!this.rows.length)return false;var a=this.selection.join(",");for(var b in this.rows)this.highlight_row(b,true);this.selection.join(",")!=
a&&this.triggerEvent("select");this.focus();return true},clear_selection:function(a){var b=this.selection.length;if(a)for(var c=0;c<this.selection.length;c++){if(this.selection[c]==a){this.selection.splice(c,1);break}}else{for(c=0;c<this.selection.length;c++)this.rows[this.selection[c]]&&$(this.rows[this.selection[c]].obj).removeClass("selected").removeClass("unfocused");this.selection=[]}b&&!this.selection.length&&this.triggerEvent("select")},get_selection:function(){return this.selection},get_single_selection:function(){return this.selection.length==
1?this.selection[0]:null},highlight_row:function(a,b){if(this.rows[a]&&!b){if(this.selection.length>1||!this.in_selection(a)){this.clear_selection();this.selection[0]=a;$(this.rows[a].obj).addClass("selected")}}else if(this.rows[a])if(this.in_selection(a)){var c=$.inArray(a,this.selection);b=this.selection.slice(0,c);c=this.selection.slice(c+1,this.selection.length);this.selection=b.concat(c);$(this.rows[a].obj).removeClass("selected").removeClass("unfocused")}else{this.selection[this.selection.length]=
a;$(this.rows[a].obj).addClass("selected")}},key_press:function(a){if(this.focused!=true)return true;var b=rcube_event.get_keycode(a),c=rcube_event.get_modifier(a);switch(b){case 40:case 38:case 63233:case 63232:rcube_event.cancel(a);return this.use_arrow_key(b,c);case 61:case 107:case 109:case 32:rcube_event.cancel(a);a=this.use_plusminus_key(b,c);this.key_pressed=b;this.triggerEvent("keypress");return a;case 36:this.select_first(c);return rcube_event.cancel(a);case 35:this.select_last(c);return rcube_event.cancel(a);
default:this.shiftkey=a.shiftKey;this.key_pressed=b;this.triggerEvent("keypress");if(this.key_pressed==this.BACKSPACE_KEY)return rcube_event.cancel(a)}return true},key_down:function(a){switch(rcube_event.get_keycode(a)){case 27:if(this.drag_active)return this.drag_mouse_up(a);case 40:case 38:case 63233:case 63232:case 61:case 107:case 109:case 32:if(!rcube_event.get_modifier(a)&&this.focused)return rcube_event.cancel(a);default:}return true},use_arrow_key:function(a,b){var c;if(a==40||a==63233)c=
this.get_next_row();else if(a==38||a==63232)c=this.get_prev_row();if(c){this.select_row(c.uid,b,true);this.scrollto(c.uid)}return false},use_plusminus_key:function(a,b){var c=this.rows[this.last_selected];if(c){if(a==32)a=c.expanded?109:61;if(a==61||a==107)b==CONTROL_KEY||this.multiexpand?this.expand_all(c):this.expand(c);else b==CONTROL_KEY||this.multiexpand?this.collapse_all(c):this.collapse(c);if(a=document.getElementById("rcmexpando"+c.uid))a.className=c.expanded?"expanded":"collapsed";return false}},
scrollto:function(a){var b=this.rows[a].obj;if(b&&this.frame){var c=Number(b.offsetTop);if(!c&&this.rows[a].parent_uid){this.expand_all(this.rows[this.find_root(this.rows[a].uid)]);c=Number(b.offsetTop)}if(c<Number(this.frame.scrollTop))this.frame.scrollTop=c;else if(c+Number(b.offsetHeight)>Number(this.frame.scrollTop)+Number(this.frame.offsetHeight))this.frame.scrollTop=c+Number(b.offsetHeight)-Number(this.frame.offsetHeight)}},drag_mouse_move:function(a){if(this.drag_start){var b=rcube_event.get_mouse_pos(a);
if(!this.drag_mouse_start||Math.abs(b.x-this.drag_mouse_start.x)<3&&Math.abs(b.y-this.drag_mouse_start.y)<3)return false;if(!this.draglayer)this.draglayer=$("<div>").attr("id","rcmdraglayer").css({position:"absolute",display:"none","z-index":2E3}).appendTo(document.body);for(var c=$.merge([],this.selection),d,e=0;e<c.length;e++){d=c[e];this.rows[d].has_children&&!this.rows[d].expanded&&this.select_childs(d)}c="";var f;for(e=0;e<this.selection.length;e++){if(e>12){c+="...";break}if(f=this.rows[this.selection[e]].obj)for(d=
b=0;d<f.childNodes.length;d++)if(f.childNodes[d].nodeName=="TD"){if(e==0)this.drag_start_pos=$(f.childNodes[d]).offset();if(this.subject_col<0||this.subject_col>=0&&this.subject_col==b){var g,h,i=f.childNodes[d].childNodes;for(b=0;b<i.length;b++)if((h=f.childNodes[d].childNodes[b])&&(h.nodeType==3||h.nodeName=="A"))g=h;if(!g)break;d=g.nodeType==3?g.data:g.innerHTML;d=d.replace(/^\s+/i,"");c+=(d.length>50?d.substring(0,50)+"...":d)+"<br />";break}b++}}this.draglayer.html(c);this.draglayer.show();this.drag_active=
true;this.triggerEvent("dragstart")}if(this.drag_active&&this.draglayer){e=rcube_event.get_mouse_pos(a);this.draglayer.css({left:e.x+20+"px",top:e.y-5+(bw.ie?document.documentElement.scrollTop:0)+"px"});this.triggerEvent("dragmove",a?a:window.event)}return this.drag_start=false},drag_mouse_up:function(a){document.onmousemove=null;if(this.draglayer&&this.draglayer.is(":visible"))this.drag_start_pos?this.draglayer.animate(this.drag_start_pos,300,"swing").hide(20):this.draglayer.hide();this.drag_active&&
this.focus();this.drag_active=false;rcube_event.remove_listener({event:"mousemove",object:this,method:"drag_mouse_move"});rcube_event.remove_listener({event:"mouseup",object:this,method:"drag_mouse_up"});$("div.iframe-dragdrop-fix").each(function(){this.parentNode.removeChild(this)});this.triggerEvent("dragend");return rcube_event.cancel(a)},set_background_mode:function(a){if(a)this.background=document.createElement("tbody");else if(this.background){this.list.replaceChild(this.background,this.list.tBodies[0]);
this.background=null}}};rcube_list_widget.prototype.addEventListener=rcube_event_engine.prototype.addEventListener;rcube_list_widget.prototype.removeEventListener=rcube_event_engine.prototype.removeEventListener;rcube_list_widget.prototype.triggerEvent=rcube_event_engine.prototype.triggerEvent;
