/*
	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
	Available via Academic Free License >= 2.1 OR the modified BSD license.
	see: http://dojotoolkit.org/license for details
*/


if(!dojo._hasResource["dojox.dtl.contrib.dijit"]){
dojo._hasResource["dojox.dtl.contrib.dijit"]=true;
dojo.provide("dojox.dtl.contrib.dijit");
dojo.require("dojox.dtl.dom");
dojo.require("dojo.parser");
(function(){
var dd=dojox.dtl;
var _1=dd.contrib.dijit;
_1.AttachNode=dojo.extend(function(_2,_3){
this._keys=_2;
this._object=_3;
},{render:function(_4,_5){
if(!this._rendered){
this._rendered=true;
for(var i=0,_6;_6=this._keys[i];i++){
_4.getThis()[_6]=this._object||_5.getParent();
}
}
return _5;
},unrender:function(_7,_8){
if(this._rendered){
this._rendered=false;
for(var i=0,_9;_9=this._keys[i];i++){
if(_7.getThis()[_9]===(this._object||_8.getParent())){
delete _7.getThis()[_9];
}
}
}
return _8;
},clone:function(_a){
return new this.constructor(this._keys,this._object);
}});
_1.EventNode=dojo.extend(function(_b,_c){
this._command=_b;
var _d,_e=_b.split(/\s*,\s*/);
var _f=dojo.trim;
var _10=[];
var fns=[];
while(_d=_e.pop()){
if(_d){
var fn=null;
if(_d.indexOf(":")!=-1){
var _11=_d.split(":");
_d=_f(_11[0]);
fn=_f(_11.slice(1).join(":"));
}else{
_d=_f(_d);
}
if(!fn){
fn=_d;
}
_10.push(_d);
fns.push(fn);
}
}
this._types=_10;
this._fns=fns;
this._object=_c;
this._rendered=[];
},{_clear:false,render:function(_12,_13){
for(var i=0,_14;_14=this._types[i];i++){
if(!this._clear&&!this._object){
_13.getParent()[_14]=null;
}
var fn=this._fns[i];
var _15;
if(fn.indexOf(" ")!=-1){
if(this._rendered[i]){
dojo.disconnect(this._rendered[i]);
this._rendered[i]=false;
}
_15=dojo.map(fn.split(" ").slice(1),function(_16){
return new dd._Filter(_16).resolve(_12);
});
fn=fn.split(" ",2)[0];
}
if(!this._rendered[i]){
if(!this._object){
this._rendered[i]=_13.addEvent(_12,_14,fn,_15);
}else{
this._rendered[i]=dojo.connect(this._object,_14,_12.getThis(),fn);
}
}
}
this._clear=true;
return _13;
},unrender:function(_17,_18){
while(this._rendered.length){
dojo.disconnect(this._rendered.pop());
}
return _18;
},clone:function(){
return new this.constructor(this._command,this._object);
}});
function _19(n1){
var n2=n1.cloneNode(true);
if(dojo.isIE){
dojo.query("script",n2).forEach("item.text = this[index].text;",dojo.query("script",n1));
}
return n2;
};
_1.DojoTypeNode=dojo.extend(function(_1a,_1b){
this._node=_1a;
this._parsed=_1b;
var _1c=_1a.getAttribute("dojoAttachEvent");
if(_1c){
this._events=new _1.EventNode(dojo.trim(_1c));
}
var _1d=_1a.getAttribute("dojoAttachPoint");
if(_1d){
this._attach=new _1.AttachNode(dojo.trim(_1d).split(/\s*,\s*/));
}
if(!_1b){
this._dijit=dojo.parser.instantiate([_19(_1a)])[0];
}else{
_1a=_19(_1a);
var old=_1.widgetsInTemplate;
_1.widgetsInTemplate=false;
this._template=new dd.DomTemplate(_1a);
_1.widgetsInTemplate=old;
}
},{render:function(_1e,_1f){
if(this._parsed){
var _20=new dd.DomBuffer();
this._template.render(_1e,_20);
var _21=_19(_20.getRootNode());
var div=document.createElement("div");
div.appendChild(_21);
var _22=div.innerHTML;
div.removeChild(_21);
if(_22!=this._rendered){
this._rendered=_22;
if(this._dijit){
this._dijit.destroyRecursive();
}
this._dijit=dojo.parser.instantiate([_21])[0];
}
}
var _23=this._dijit.domNode;
if(this._events){
this._events._object=this._dijit;
this._events.render(_1e,_1f);
}
if(this._attach){
this._attach._object=this._dijit;
this._attach.render(_1e,_1f);
}
return _1f.concat(_23);
},unrender:function(_24,_25){
return _25.remove(this._dijit.domNode);
},clone:function(){
return new this.constructor(this._node,this._parsed);
}});
dojo.mixin(_1,{widgetsInTemplate:true,dojoAttachPoint:function(_26,_27){
return new _1.AttachNode(_27.contents.slice(16).split(/\s*,\s*/));
},dojoAttachEvent:function(_28,_29){
return new _1.EventNode(_29.contents.slice(16));
},dojoType:function(_2a,_2b){
var _2c=false;
if(_2b.contents.slice(-7)==" parsed"){
_2c=true;
}
var _2d=_2b.contents.slice(9);
var _2e=_2c?_2d.slice(0,-7):_2d.toString();
if(_1.widgetsInTemplate){
var _2f=_2a.swallowNode();
_2f.setAttribute("dojoType",_2e);
return new _1.DojoTypeNode(_2f,_2c);
}
return new dd.AttributeNode("dojoType",_2e);
},on:function(_30,_31){
var _32=_31.contents.split();
return new _1.EventNode(_32[0]+":"+_32.slice(1).join(" "));
}});
dd.register.tags("dojox.dtl.contrib",{"dijit":["attr:dojoType","attr:dojoAttachPoint",["attr:attach","dojoAttachPoint"],"attr:dojoAttachEvent",[/(attr:)?on(click|key(up))/i,"on"]]});
})();
}
