
/*
	"Hemi" JavaScript Framework
	Engine for Web Applications 3.1
	Composite file "hemi.comp.js" release: 3.1.1
	Copyright 2002 - 2010. All Rights Reserved.
	Author: Stephen W. Cote
	Email: sw.cote@gmail.com
	Project: http://www.whitefrost.com/Hemi/
	BSD License: http://www.whitefrost.com/Hemi.license.txt
*/
(function(){H.include("hemi.object");H.include("hemi.driver");H.include("hemi.transaction");H.namespace("task",H,{service:null,serviceImpl:
function(){var t=this,_x=H.xml,_m=H.message.service,_t=H.transaction.service;t.o={rd:[]};t.p={etn:0,etl:0,wl:0,til:"task_trans_",sd:0};t.data={a:0,b:1,c:2,d:3,e:4,f:5,g:99,h:"xml",i:"task",j:"import-task",k:D.F,l:"event",m:"script",n:""};t.newTaskObject=function(n,at,a,ht,h,k,i,r,p){var o={task_state:0,handled:0,task_name:n,action_type:at,action:a,handler_type:ht,handler:h,task_id:k,index:i,transaction_id:r,processor:p,data:0,depends:[],executed:0,busy:0,ad:0,parent_id:0,setAutoDestroy:
function(b){this.ad=(b?1:0);}};H.prepareObject("task_object","3.1.1",1,o);return o;};t.endTask=function(i,b){if(D.TS(i))o=t.getTask(i);else if(D.TO(i))o=i;if(!t.isTask(o))return 0;for(var d=0;d<o.depends.length;d++){t.returnDependency(o.depends[d]);if(b)delete t.o.rd[o.depends[d]];}t.clearTask(i);};t.clearTask=function(i){var _p=t.o,o,l;if(D.TS(i))o=t.getTask(i);else if(D.TO(i))o=i;if(t.isTask(o)){if(o.task_state<t.data.f){o.setAutoDestroy(1);return 1;}t.removeTask(o);_t.closeTransaction(o.transaction_id);return 1;}else{_m.S("Invalid task id "+i,"200.4",1);}return 0;};t.clearAllTasks=function(){var _p=t.o,_s=t.p,a,i,o;a=_p.tasks;t.clearTasks();_p.rd=[];_s.etn=0;_s.etl=0;for(i=0;i<a.length;i++){o=a[i];if(!o)continue;_t.closeTransaction(o.transaction_id);}if(_s.wl){t.returnDependency("dom_event_window_load");}};t.destroy=function(){var t=this;if(t.r!=5){t.r=5;H.message.service.unsubscribe(t,"dom_event_window_load","_handle_window_load");H.message.service.unsubscribe(t,"destroy","HWD",window);t.clearAllTasks();t.o.rd=[];}};t.sigterm=function(){this.destroy();};t.HWD=function(s,v){this.destroy();};t.isExternalLoaded=function(){return t.p.etl;};t.addTaskDependency=function(o,d){if(t.isTask(o)&&!t.o.rd[d]){o.depends[o.depends.length]=d;return 1;}return 0;};t.getTaskDepends=function(o){var h,m,r=[];if(!t.isTask(o))return r;if(!o.depends.length)return r;for(h=0;h<o.depends.length;h++)r[h]=o.depends[h];return r;};t.returnDependency=function(v){var o,_p=t.o;if(D.TO(v)&&t.isTask(v)){o=v;v=v.task_name;}else{o=t.getTaskByName(v);}if(t.isTask(o)&&o.task_state<t.data.e){o.task_state=t.data.e;}if(!_p.rd[v]){_p.rd[v]=1;t.UT(v);}return 1;};t.clearDependency=function(v){var o,_p=t.o;if(t.isTask(v)){o=v;v=v.task_name;}else{o=t.getTaskByName(v);}if(_p.rd[v]){delete _p.rd[v];t.UT(v);}return 1;};t.UT=function(s){var a,o,i,h,m,_d=t.data;a=t.o.tasks;for(i=0;i<a.length;i++){o=a[i];if(!D.TO(o)||o.task_state==_d.f){continue;}m=0;for(h=0;h<o.depends.length;h++){if(o.depends[h]==s){o.depends[h]=0;}else if(o.depends[h]!=0){m=1;}}if(!m){o.depends=[];t.serveTaskTransaction(o);}}};t.isTaskComplete=function(o){if(t.isTask(o)&&o.task_state==t.data.f){return 1;}return 0;};t.serveTaskTransaction=function(o){var t=this;if(t.isTask(o)&&t.p.sd){setTimeout("Hemi.registry.service.getObject('"+t.i+"').ST('"+o.task_id+"')",t.p.sd);}else{t.ST(o);}};t.ST=function(o){if(D.TS(o))o=t.getTask(o);if(t.isTask(o)){var z=_t.getPacket(o.transaction_id),_d=t.data;if(z){_t.serveTransaction(z,t.i);return 1;}else{_m.S("Task could not be executed as a transaction.","200.4");return 0;}}else{_m.S("Tasks:object is not a task. Auto-Destroyed tasks may also cause this message.","511.4");}};t.executeTaskHandler=function(o){var _d=t.data;if(t.isTask(o)){if(o.task_state==_d.c&&o.executed&&!o.handled){o.task_state=_d.d;t.serveTaskTransaction(o);return 1;}else{_m.S("Task handler "+o.task_name+"("+o.task_state+" / "+o.executed+" / "+o.handled+")cannot be served at this time.","511.4");}}else{_m.S("Task object handler cannot be executed.","511.4");}return 0;};t.executeTaskHandlerByName=function(n){return t.executeTaskHandler(t.getTaskByName(n));};t.executeTaskByName=function(n){t.executeTask(t.getTaskByName(n));};t.executeTask=function(o){var _d=t.data;if(t.isTask(o)){if(o.task_state!=_d.b){_m.S("Task object cannot be executed.","511.4");return 0;}o.task_state=_d.c;t.serveTaskTransaction(o);}else{_m.S("Task object cannot be executed.","511.4");}};t.importTaskFromXml=function(n,p,d,b){var r,i,a,at,h,ht,z,x,pi,v;if(!D.TO(d)){if(p&&p.action_type.match(/xml/)&&D.TO(p.data)){d=p.data;pi=p.task_id;}else if(t.p.etl){z=t.getTaskByName(t.p.etn);if(z)d=z.data;}}if(!pi&&p)pi=(p.parent_id?p.parent_id:p.task_id);if(!D.TO(d)||d==null){return 0;}if(D.TS(n)){z=_x.queryNode(d.documentElement,"task",0,"id",n);if(D.TO(z)&&z!=null)return t.importTaskFromXml(z,p,d,b);else _m.S("Task '"+n+"' does not exist","200.4");}if(D.TO(n)&&n!=null&&D.TO(d)&&d!=null){r=H.GetSpecifiedAttribute(n,"rid");i=H.GetSpecifiedAttribute(n,"id");if(r){z=_x.queryNode(d.documentElement,"task",0,"id",r);if(D.TO(z)&&z!=null){if(n.getAttribute("auto-execute")=="1")b=1;t.importTaskFromXml(z,p,0,b);return 1;}else{_m.S("Task id "+r+" does not exist","200.4");}}else if(i){a=n.getAttribute("action");at=n.getAttribute("action-type");h=n.getAttribute("handler");ht=n.getAttribute("handler-type");if(D.TO(p)){if(D.TF(p.processor)){a=p.processor(t,p,n,a);at=p.processor(t,p,n,at);h=p.processor(t,p,n,h);ht=p.processor(t,p,n,ht);}t.addTaskDependency(p,i);}r=t.addTask(i,at,a,ht,h,(p?p.processor:0));if(!t.isTask(r))return 0;if(pi)r.parent_id=pi;z=n.getElementsByTagName("task");for(x=0;x<z.length;x++)t.importTaskFromXml(z[x],r);z=n.getElementsByTagName("depends");for(x=0;x<z.length;x++){if(H.IsAttributeSet(z[x],"rid")){t.addTaskDependency(p,z[x].getAttribute("rid"));}}if(b){t.executeTask(r);}return 1;}else{_m.S("Task does not define an id or reference-id","200.4");}}return 0;};t.executeTaskLoader=function(n,at,a,ht,h,f){var i=t.addTaskLoader(n,at,a,ht,h,f);t.executeTask(i);};t.addTaskLoader=function(n,at,a,ht,h,f){t.p.etl=0;t.p.etn=n;return t.addTask(n,at,a,ht,h,f);};t.addTask=function(n,at,a,ht,h,f){var v,i,l;i=t.p.til+(++H.driver.service.p.gc);if(t.isTask(n)){return 0;}l=t.o.tasks.length;if(!D.TS(h)&&!D.TF(h))h=0;if(!h)ht=0;v=t.newTaskObject(n,at,a,ht,h,i,l,0,f);t.addNewTask(v,n,i);v.transaction_id=_t.openTransaction(i,t,{id:i,name:n});return v;};t.doTransaction=function(s,p){var v,_d=t.data,_s=t.p;v=t.getTask(p.data.id);if(v){_m.S("Processing "+v.task_name+" with dl="+v.depends.length+":"+v.task_state+":"+v.executed,"511.1");switch(v.task_state){case _d.b:break;case _d.c:if(!v.executed){v.executed=1;t.EA(v,0);}break;case _d.d:if(!v.handled){if(v.task_name==_s.etn){_s.etl=1;}if(!v.depends.length){v.handled=1;t.EA(v,1);}else{}}break;case _d.e:if(!v.depends.length){v.task_state=_d.f;t.serveTaskTransaction(v);}break;case _d.f:if(!v.depends.length&&v.executed&&v.handled){_m.S("Return "+v.task_name,"200.1");t.returnDependency(v.task_name);}else{_m.S("Task "+v.task_name+" was completed without an action,handler,or with dependencies","200.4");}return 1;break;case _d.g:return 1;break;default:_m.S("Task "+v.task_name+" in state "+v.task_state+" will not be handled.","200.4");break;}}else{_m.S("Invalid task reference for "+p.data.id,"200.4");}return 0;};t.EA=function(o,z){var x,y,_d=t.data,_s=t.p,d,n,z,r,i,v;x=(z?o.handler:o.action);y=(z?o.handler_type:o.action_type);_m.S("Executing task "+o.task_name+" "+y+" "+x,"511.1");if(t.isTask(o)){switch(y){case _d.l:if(o.task_state==_d.d)o.task_state=_d.e;if(o.task_state<=_d.c)o.task_state=_d.d;_m.publish(x,{service:t,task:o});t.serveTaskTransaction(o);break;case _d.h:_x.getXml(x,t.HLX,1,o.task_id);break;case _d.i:t.executeTaskByName(x);t.serveTaskTransaction(o);return 1;break;case _d.j:t.importTaskFromXml(x,o);if(o.task_state==_d.d)o.task_state=_d.e;if(o.task_state<=_d.c)o.task_state=_d.d;t.executeTaskByName(x);t.serveTaskTransaction(o);return 1;break;case _d.m:if(x=="#cdata"){try{v=(o.parent_id?t.getTask(o.parent_id):0);if(!v||!t.isTask(v))v=(_s.etl?t.getTaskByName(_s.etn):0);if(v){d=v.data;z=_x.queryNode(d.documentElement,"task",0,"id",o.task_name);if(D.TO(z)&&z!=null){n=_x.getCDATAValue(z);if(o.processor)n=o.processor(o,v,z,n);eval(n);t.serveTaskTransaction(o);return 1;}else{_m.S("Null task id pointer","200.4");return 0;}}else{_m.S("Cannot execute #cdata task action without xml document","200.4");return 0;}}catch(e){_m.S("Error executing #cdata action:"+(e.description?e.description:e.message),"200.4");return 0;}}break;case _d.k:try{z=eval(x);r=1;if(D.TF(z)){r=z(o.task_name,t);}if(r){if(o.task_state==_d.d)o.task_state=_d.e;if(o.task_state<=_d.c)o.task_state=_d.d;}t.serveTaskTransaction(o);}catch(e){_m.S("Error executing function action:"+(e.description?e.description:e.message),"200.4");return 0;}break;default:if(o.task_state==_d.d)o.task_state=_d.e;if(o.task_state<=_d.c)o.task_state=_d.d;t.serveTaskTransaction(o);break;}}else{_m.S("Invalid task reference","200.4");}return 0;};t.startTransaction=function(s,p){var v,_d=t.data;v=t.getTask(p.data.id);if(v)v.task_state=_d.b;else _m.S("Invalid task id "+p.data.id,"200.4");return 1;};t.endTransaction=function(s,p){var v=t.getTask(p.data.id);if(v.ad){v.task_state=t.data.g;t.clearTask(v);}return 1;};t.HLX=function(n,x){var i=x.id,c=t,b,_d,a,z;_d=c.data;b=t.getTask(i);if(b){if(!D.TU(x.xdom)){b.data=x.xdom;}else{_m.S("Null XML Response","512.5",1);}b.task_state=_d.d;t.serveTaskTransaction(b);}else{_m.S("Invalid task identifier in xml handler","200.4")}};t._handle_window_load=function(){t.p.wl=1;t.returnDependency("dom_event_window_load");};H.prepareObject("task_service","3.1.1",1,t);H.object.addObjectAccessor(t,"task");_t.register(t);_m.subscribe(t,"dom_event_window_load","_handle_window_load");_m.subscribe(t,"destroy","HWD",window);t.r=4;}},1);}());
/* End Hemi Framework 3.1 */
