
/*
	"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.namespace("data.form",H,{service:0,serviceImpl:
function(){var t=this,_x=H.xml,_m=H.message.service;t.o={fn:["hidden","text","password","textarea","select-multiple","select-one","checkbox"]};t.p={a:1,l:"hemi.data.form"};t.isFieldNode=function(n){var y=0;if(D.TO(n)){y=n.type;n=n.nodeName;}var b=0;for(var i=0;i<this.o.fn.length;i++){if((y&&this.o.fn[i]==y.toLowerCase())||this.o.fn[i]==n.toLowerCase()){b=1;break;}}return b;};t.getElements=function(fi){if(D.TU(fi))fi=t.p.l;var f=t.getFormByName(fi),a,r=[],c=0,i;if(!f){_m.S("Invalid form reference '"+fi+"'","200.4");return 0;}a=f.getElements();for(i=0;i<a.length;i++){if(a[i].r)r[c++]=a[i];}return r;};t.resetAll=function(){this.clearForms();};t.resetDataForm=function(fi,q){return t.clearDataForm(fi,1,q);};t.clearDataForm=function(fi,b,q){var _p=t.o,f,o,i,a,y,z;if(D.TU(fi))fi=t.p.l;f=t.getFormByName(fi);if(!f){_m.S("Invalid form reference '"+fi+"'","200.4");return 0;}a=f.getElements();for(i=0;i<a.length;i++){o=a[i];if(o.e&&b){z=H.registry.service.getObject(o.oid);if(z)t.synchronizeComponent(z,1,0,q);}else if(o.e){switch(o.t){case "hidden":case "text":case "password":case "textarea":o.e.value="";break;case "select-multiple":o.e.selectedIndex=-1;break;case "select-one":o.e.selectedIndex=-1;break;case "checkbox":o.e.checked=false;break;}}}return 1;};t.getElement=function(n,fi){var o=t.getXElement(n,fi);if(!o||!o.r)return 0;return o.e;};t.getXElement=function(n,fi){var _p=t.o,f;if(D.TU(fi==D.U))fi=t.p.l;f=t.getFormByName(fi);if(f)return f.getElementByName(n);_m.S("Invalid form reference '"+fi+"' for '"+n+"'","200.4");return 0;};t.getValue=function(n,fi){var o=t.getXElement(n,fi);if(o){if(o.r)t.synchronizeComponent(H.registry.service.getObject(o.oid),0,1);if(!D.TO(o.v))return o.v;else	return o.v.value;}_m.S("Invalid element reference '"+n+"'","200.4");return 0;};t.setValue=function(n,v,fi){var o=t.getXElement(n,fi);if(o){o.v=v;if(o.r)t.synchronizeComponent(H.registry.service.getObject(o.oid),1,1);return 1;};return 0;};t.synchronizeComponent=function(x,b,l,q,s){if(!x){_m.S("Invalid Component reference","200.4");return 0;}var o,fi,f,_s=t.p,z,y,i,a;if(!(fi=x.p.rid))fi=_s.l;if(!(f=t.getFormByName(fi))){_m.S("Invalid form reference '"+fi+"' in synchronizeComponent","200.4");return 0;}o=f.getElementByName(x.p.cid);if(o){if(b&q)o.v=o.d;switch(o.t){case "checkbox":if(!b)o.v=x.getContainer().checked;else x.getContainer().checked=o.v;break;case "hidden":case "password":case "text":case "textarea":if(!b)o.v=x.getContainer().value;else x.getContainer().value=o.v;break;case "select-multiple":if(!b){o.v=[];a=x.getContainer().options;for(i=0;i<a.length;i++){if(a[i].selected)o.v.push({'i':i,'value':(a[i].value?a[i].value:a[i].text),'text':a[i].text});}}else{if(D.TO(o.v)&&D.TN(o.v.length)&&x.getContainer().options.length>=o.v.length){a=x.getContainer().options;for(i=0;i<o.v.length;i++){a[o.v[i].i].selected=1;}}}break;case "select-one":if(!b){z=x.getContainer().selectedIndex;if(z>-1){y=x.getContainer().options[z];o.v={i:z,value:(y.value?y.value:y.text),text:y.text};}}else{if(D.TO(o.v)&&D.TN(o.v.i)&&x.getContainer().options.length>o.v.i){x.getContainer().selectedIndex=o.v.i;}}break;case "wideselect":if(!b){y=x.getApplicationComponent();z=y.getSelectedIndex();if(z>-1){o.v={i:z,value:y.getSelectedValue(),text:y.getSelectedText()};}else{if(D.TO(o.v)&&D.TN(o.v.i)&&y.getItemSize()>o.v.i){y.selectItem(o.v.i);}}}break;default:_m.S("Unhandled form field type '"+o.t+"'","200.1");break;}if(!b&&!l){if(_s.a)t.validate(o.n,0,fi);o.e=0;o.oid=0;o.r=0;}else{o.e=x.getContainer();o.oid=x.i;o.r=1;}_m.S("Synchronize "+(b?"in":"out")+" '"+o.n+"'","200.1");}else{_m.S("Object is not registered with the XHTMLFormComponent.","200.1");}};t.removeDataForm=function(v){var o,_p=this.o,i=0,e,_f;if(D.TO(v))o=v;else if(D.TS(v))o=t.getFormByName(v);if(!o)return 0;_f=o.o;this.removeForm(o);for(;i<_f.elements.length;){e=_f.elements[i++];e.v=0;e.d=0;e.e=0;}o.clearElements();return 1;};t.addComponent=function(o,ri){var _p=t.o,i,v,tp=0,e,l,p,_s=this.p,f,_f,b=0;if(o&&o.t&&o.t.match(/xhtml_component/)&&o.p.cid){if(!this.isFieldNode(o.getContainer())){_m.S("Skip non-field node '"+o.getContainer().nodeName+"'","200.1");return 0;}if(!D.TS(ri))ri=_s.l;if(!(f=t.getFormByName(ri))){f={i:ri,x:0,n:0};H.object.addObjectAccessor(f,"element");l=_p.forms.length;this.addNewForm(f,ri,_s.l+"-"+l);f.x=l;f.n=_s.l+"-"+l;}i=o.p.cid;if(!f.getElementByName(i)){e=o.getContainer();if(!(p=e.getAttribute("pattern-id"))){p=0;}if(e.type)tp=e.type;l=f.o.elements.length;v={t:tp,v:0,d:0,n:i,i:l,oid:o.i,vp:p,e:e,vd:0,f:ri,r:1,getType:
function(){return this.t},getIsRendered:
function(){return this.r},getName:
function(){return this.n},getValue:
function(){return this.v},getObjectId:
function(){return this.oid},getElement:
function(){return this.e},getReferenceId:
function(){return this.f}};f.addNewElement(v,i,o.i);t.synchronizeComponent(o,0,1,0,1);v.d=v.v;_m.S("Add "+i+"("+tp+")with pattern "+p,"200.1");}else{t.synchronizeComponent(o,1);_m.S("Skip existing "+i,"200.1");}b=1;}else{}return b;};t.validateForm=function(fi,b){var a=t.getElements(fi),i=0,r=1,o;for(;i<a.length;i++){r=t.validate(a[i]);if(!r){if(b){H.message.service.S((H.lookup("hemi.data.validator")?H.data.validator.service.getValidationErrorText(a[i].e):"Validator not loaded"),"200.4",1);a[i].e.focus();}return r;}}return r;};t.validate=function(n,w,fi){var _s=this.p,v,_m=H.message.service,r,o;if(D.TO(n)){o=n;if(!D.TU(o.getAttribute))o=t.getXElement(o.getAttribute("space-id"),o.getAttribute("rid"));}else o=t.getXElement(n,fi);if(!o){_m.S("Invalid XElement reference '"+n+"'","200.4",1);return 0;}if(!o.r){_m.S("Unlinked XElement in XHTMLFormComponent for '"+n+"'. Returning previously validated value.","200.2");return o.vd;}if((!w&&!o.vp)||!H.lookup("hemi.data.validator")){_m.S("Pattern '"+o.vp+"'/'"+w+"' not defined or validator not implemented in XHTMLFormComponent.validate","200.1");return 1;}if(!D.TS(w))w=o.vp;v=H.data.validator.service;r=v.validateField(o.e,w);if(!r){_m.S("Validation Error:"+v.getValidationErrorText(w),"200.4");}else{_m.S("Validated '"+n+"' with '"+w+"'","200.1");}o.vd=r;return r;};H.IM(t,"base_object","xhtml_form","3.1.1");H.registry.service.addObject(t);t.r=4;H.object.addObjectAccessor(t,"form");}},1);}());
/* End Hemi Framework 3.1 */
