
if(!this.JSON){JSON={};}
(function(){function f(n){return n<10?'0'+n:n;}
if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return this.getUTCFullYear()+'-'+
f(this.getUTCMonth()+1)+'-'+
f(this.getUTCDate())+'T'+
f(this.getUTCHours())+':'+
f(this.getUTCMinutes())+':'+
f(this.getUTCSeconds())+'Z';};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}
var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapeable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapeable.lastIndex=0;return escapeable.test(string)?'"'+string.replace(escapeable,function(a){var c=meta[a];if(typeof c==='string'){return c;}
return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}
function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}
if(typeof rep==='function'){value=rep.call(holder,key,value);}
switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
gap+=indent;partial=[];if(typeof value.length==='number'&&!value.propertyIsEnumerable('length')){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}
v=partial.length===0?'[]':gap?'[\n'+gap+
partial.join(',\n'+gap)+'\n'+
mind+']':'['+partial.join(',')+']';gap=mind;return v;}
if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}
v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+
mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}
if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}
rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}
return str('',{'':value});};}
if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}
return reviver.call(holder,key,value);}
cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+
('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}
if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}
throw new SyntaxError('JSON.parse');};}})();function Element(){this.display_name=function(x){var tokens=x.split('.');var fname=tokens.pop();fname=fname.replace(/_id/,'');return fname;};}
function Form(){this.message="",this.firstMessage=function(x){if(!this.message){this.message=x;}};this.validationObjects=[];this.addValidationObject=function(x,index){this.validationObjects.push({field:x,index:index});};this.lastError={obj:null,style:{}};this.runValidations=function(){var result=true;this.message='';if(this.lastError.obj){for(var p in this.lastError.style){this.lastError.obj.style[p]=this.lastError.style[p];}}
this.validationObjects.sort(function(a,b){return a.index-b.index});for(var i=0;i<this.validationObjects.length;i++){var vobj=this.validationObjects[i].field;result=result&&vobj.validationFunction();if(!result){this.lastError.obj=vobj;this.lastError.style.borderWidth=vobj.style.borderWidth;this.lastError.style.borderColor=vobj.style.borderColor;vobj.style.borderWidth='medium';vobj.style.borderColor='red';vobj.scrollIntoView();window.scrollBy(0,-50);vobj.focus();break;}}
return result;};this.create=function(){return new Form(x,y,m,d);};};Form.prototype=new Element();Form.prototype.constructor=Form;function Control(){this.validations={notNull:function(x,s){if(!x.value){Ngx.Odb.Form.firstMessage((s||Ngx.Odb.Form.display_name(x.name))+" cannot be null");return false;}
else{return true;}},isNull:function(x,s){if(!x.value){return true;}
else{Ngx.Odb.Form.firstMessage((s||Ngx.Odb.Form.display_name(x.name))+" must be null");return false;}},isNumber:function(x,s){if(isNaN(x.value)){Ngx.Odb.Form.firstMessage((s||Ngx.Odb.Form.display_name(x.name))+" must be a number");return false;}
else{return true;}},isNotNumber:function(x,s){if(!x.value||isNaN(x.value)){return true;}
else{Ngx.Odb.Form.firstMessage((s||Ngx.Odb.Form.display_name(x.name))+" must not be a number");return false;}},inRange:function(x,s,min,max){if(!isNaN(x.value)&&!isNaN(min)&&!isNaN(max)&&x.value>=min&&x.value<=max){return true;}
else{Ngx.Odb.Form.firstMessage((s||Ngx.Odb.Form.display_name(x.name))+" must be a number between "+min+" and "+max);return false;}},isPositive:function(x,s){if(isNaN(x.value)||x.value==''){return true;}
if(x.value<=0){Ngx.Odb.Form.firstMessage((s||Ngx.Odb.Form.display_name(x.name))+" value not valid");return false;}
else{return true;}},isEmail:function(x,s){objRegExp=/\w{1,}\.*\w{1,}\@\w{2,}\.\D+/g;if(x.value&&x.value.search(objRegExp)){Ngx.Odb.Form.firstMessage((s||Ngx.Odb.Form.display_name(x.name))+" must be a valid email id");return false}
else{return true;}}};this.create=function(){return new Control();};}
Control.prototype=Element;Control.prototype.constructor=Control;function DateDropdown(x,y,m,d){this.x=x;this.y=y;this.m=m;this.d=d;var _this=this;this.init_date=function(){var day=document.main[_this.d];var month=document.main[_this.m];var year=document.main[_this.y];var dateobj=new Date();var current_year=dateobj.getFullYear();var start_year=1940;var init_date=document.main.elements[_this.x].value;var init_date_tokens=init_date.split("-");var init_year=parseInt(init_date_tokens[0]);var init_month=parseInt(init_date_tokens[1]);var init_day=parseInt(init_date_tokens[2]);for(var i=1;i<=31;i++){var opt;if(init_day==i){opt=new Option(i,i,false,true);}
else{opt=new Option(i,i,false,false);}
day.options[i-1]=opt;}
for(var i=1;i<=12;i++){var opt;if(init_month==i){opt=new Option(i,i-1,false,true);}
else{opt=new Option(i,i-1,false,false);}
month.options[i-1]=opt;}
for(var i=start_year;i<=current_year;i++){var opt;if(init_year==i){opt=new Option(i,i,false,true);}
else{opt=new Option(i,i,false,false);}
year.options[i-start_year]=opt;}};this.check_date=function(y,m,d){var date=new Date(y,m,d);var yy=date.getFullYear();var mm=date.getMonth();var dd=date.getDate();return((yy==y)&&(mm==m)&&(dd==d));};this.recalc_day=function(){var day=document.main[_this.d];var month=document.main[_this.m];var year=document.main[_this.y];var sel=day.value;day.options.length=0;for(var i=1;i<=31;i++){if(this.check_date(year.value,month.value,i)){var opt;if(i==sel){opt=new Option(i,i,false,true);}
else{opt=new Option(i,i,false,false);}
day.options[i-1]=opt;}}};this.update_field=function(){var field=document.main[_this.x];var day_val=document.main[_this.d].value;var month_val=parseInt(document.main[_this.m].value)+1;var year_val=document.main[_this.y].value;field.value=year_val+'-'+month_val+'-'+day_val;};this.create=function(x,y,m,d){return new DateDropdown(x,y,m,d);};}
DateDropdown.prototype=Control;DateDropdown.prototype.constructor=DateDropdown;function Objectpicker(fname,args){var _this=this;this.do_onchange=function(evt){this.cvalue=this.selectedValue();this.onchange(this.selectedName(),this.selectedValue());};this.onchange=function(name,value){};this.selectedName=function(){return this.form_field.options[this.form_field.selectedIndex].text;};this.selectedValue=function(){return this.form_field.options[this.form_field.selectedIndex].value;};this.selectedRow=function(s){for(var i=0;i<cdata.length;i++){if(cdata[i][0]==s){return cdata[i][1];}}
return null;};this.check_constraints=function(row){if(!this.constraint_fields){return true;}
for(var i=0;i<this.constraint_fields.length;i++){var cname=this.constraint_fields[i];var cfield=document.getElementById(cname);var cvalue=cfield.options[cfield.selectedIndex].value
if(row[cname]&&cvalue>0&&row[cname]!=cvalue)
{return false;}}
return true;};this.is_unconstrained=function(){var result=true;if(!this.constraint_fields){return false;}
for(var i=0;i<this.constraint_fields.length;i++){var cname=this.constraint_fields[i];var cfield=document.getElementById(cname);var cvalue=parseInt(cfield.options[cfield.selectedIndex].value);if(cvalue>0){result=false;break;}}
return result;};this.recalc=function(){if(_this.is_unconstrained()){_this.form_field.options.length=0;_this.form_field.innerHTML='';if(_this.cis_filter>0){opt=new Option('Select here','',false,false);_this.form_field.options[0]=opt;}
else{opt=new Option(_this.cnull_option_display_name,'',false,false);_this.form_field.options[0]=opt;}
_this.form_field.setAttribute('disabled',true);_this.do_onchange();return;}
else{_this.form_field.removeAttribute('disabled');}
if(!_this.cdata){_this.do_onchange();return;}
_this.form_field.options.length=0;_this.form_field.innerHTML='';var counter=0;var optstring='';if(_this.cis_filter>0){opt=new Option('Select here','',false,false);_this.form_field.options[counter++]=opt;}
else{if(_this.cforce_selection>0){opt=new Option('Select here','-1',false,false);}
else{opt=new Option('Select here','',false,false);}
_this.form_field.options[counter++]=opt;}
var selIndex=null;var validOptions=0;for(var i=0;i<_this.cdata.length;i++){if(_this.check_constraints(_this.cdata[i][1])){if(_this.cvalue==_this.cdata[i][1].id){opt=new Option(_this.cdata[i][0],_this.cdata[i][1].id,true,true);selIndex=counter;}
else{opt=new Option(_this.cdata[i][0],_this.cdata[i][1].id,false,false);}
validOptions++;_this.form_field.options[counter++]=opt;}}
if(selIndex){_this.form_field.selectedIndex=selIndex;}
if(_this.cnull_option>0&&_this.cis_filter<=0){opt=new Option(_this.cnull_option_display_name,'',false,false);_this.form_field.options[counter++]=opt;}
if(_this.cnull_option>0&&_this.cis_filter>0){opt=new Option(_this.cnull_option_display_name,'null',false,false);_this.form_field.options[counter++]=opt;}
if(validOptions==0){_this.form_field.setAttribute("disabled",true);}
_this.do_onchange();};this.valuename=function(v){for(var i=0;i<this.cdata.length;i++){if(this.cdata[i][1].id==v){return cdata[i][0];}}
return'';};this.q_initialize=function(v){for(var i=0;i<this.form_field.options.length;i++){if(this.form_field.options[i].value==v){this.form_field.options[i].selected=true;}
else{this.form_field.options[i].selected=false;}}};if(fname){this.form_field=document.getElementById(fname);this.cforce_selection=parseInt(args.force_selection);this.cnull_option=parseInt(args.null_option);this.cnull_option_display_name=args.null_option_display_name;this.cis_filter=parseInt(args.is_filter);if(args.style_string){this.form_field.style.cssText=args.style_string;}
if(args.data){this.cdata=JSON.parse(args.data);}
this.cvalue=parseInt(args.value);if(args.constraints){this.constraint_fields=JSON.parse(args.constraints);for(var i=0;i<this.constraint_fields.length;i++){var c=this.constraint_fields[i];document.getElementById(c).onchange=this.recalc;}}
this.recalc();if(this.value){this.q_initialize(this.value);}
document.addOnLoadFunction(function(){if(_this.is_unconstrained()){_this.form_field.setAttribute('disabled',true);}});}
this.create=function(fname,args){return new Objectpicker(fname,args);};}
Objectpicker.prototype=new Control();Objectpicker.prototype.constructor=Objectpicker;var Ngx={Odb:{Form:new Form(),Control:new Control(),DateDropdown:new DateDropdown(),Objectpicker:new Objectpicker()}}
