// 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;
}
});
// 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;
}
});