// expand event:
// mouseClick plus/minus
// rowSelected row
 ctit.treeNode = Class.create( {
 initialize:function(element, options) {
this.element = $(element);
this.options = options;
this.eventMouseClick = this.options.mouseClick.bindAsEventListener(this);
this.eventRowSelected = this.rowSelected.bindAsEventListener(this);
this._onRequest = false;
Event.observe(this.element, "click", this.eventMouseClick);
Event.observe(this.options.row, "dblclick", this.eventMouseClick);
Event.observe(this.options.row, "click", this.eventRowSelected);
},
 destroy:function() {
Event.stopObserving(this.element, "click", this.eventMouseClick);
Event.stopObserving(this.options.row, "dblclick", this.eventMouseClick);
Event.stopObserving(this.options.row, "click", this.eventRowSelected);
},
 rowSelected:function(event) {
var cs = this.options.table.getElementsByClassName(this.options.currentSelectedClass);
 for(var i=0; i<cs.length; i++) {
Element.removeClassName(cs[i], this.options.currentSelectedClass);
cs[i].style.backgroundColor = '#fff';
}
var tds = this.options.row.cells;
 for(var i=0; i<tds.length; i++) {
Element.addClassName(tds[i], this.options.currentSelectedClass);
tds[i].style.backgroundColor = '#d7e2e8';
}
},
 ajaxRequest:function(url, param, onSuccessCallback) {
 if(!this._beginRequest()) {
return;
}
 if(this._changePlusMinusIcon()) {
param.ajax = true;
pThis = this;
 new Ajax.Request(url, {
method: 'post',
postBody: $H(param).toQueryString(),
 onSuccess: function(o) {
 if(typeof(onSuccessCallback) === 'function') {
var ls = o.responseText.evalJSON();
onSuccessCallback(ls, pThis.options.tBody, pThis.options.row);
}
},
 onFailure: function(o) {
alert("Connect to server failure.");
},
 onComplete: function(o) {
pThis._endRequest();
},
evalScripts:false
});
 }else {
this._endRequest();
}
},
 _changePlusMinusIcon:function() {
var imgs = this.element.getElementsByTagName('img');
if(!imgs) return false;

 if(imgs[0].src.indexOf('inactive_img.gif')>0) {
var src = imgs[0].src.replace(/\binactive_img.gif\b/, 'active_img.gif');
imgs[0].src = src;
imgs[0].alt = 'Open';
this._removeItWithChildren();
return false;
 }else {
var src = imgs[0].src.replace(/\bactive_img.gif\b/, 'inactive_img.gif');
imgs[0].src = src;
imgs[0].alt = 'Close';
return true;
}
},
 _beginRequest:function() {
if(this._onRequest) return false;
this._onRequest = true;
return true;
},
 _endRequest:function() {
this._onRequest = false;
},
 _removeItWithChildren:function() {
var row = this.options.row;
var level = this._getLevel(row);
var tBody = this.options.tBody;
var i=0;
 while(true) {
var nextRow = row.nextSibling;
if(isNull(nextRow)) break;
var pLevel = this._getLevel(nextRow);
 if(pLevel>level) {
tBody.removeChild(nextRow);
 }else {
break;
}
}
},
 _getLevel:function(row) {
 if(!isNull(row)) {
var o = row.cells[this.options.treeNodeIndex];
 if(o) {
var mtch = o.className.match(/\bcontent_indent([0-9]+)\b/);
 if(mtch && mtch[1]) {
return parseInt(mtch[1]);
}
}
}
return 0;
}
});
|