﻿
Ext.namespace('NPSL','NPSL.Cms');(function(){var Cms=NPSL.Cms;Cms.ColType={Normal:0,FileData:1,FileMime:2,FileName:3,Html:4,Image:5,Link:6,Enumerated:7,User:8,Region:9,Indicator:10,Time:11,Measure:12,MeasureSid:13,SearchEnum:14,VideoCode:15,AutoIncrement:16,Position:17,Chart:18,Document:19,Boolean:20,AppSid:21};var ColType=Cms.ColType;Cms.ColTypeInfo={0:__tr('Normal'),1:__tr('Uploaded file'),2:__tr('Uploaded file type'),3:__tr('Uploaded file name'),4:__tr('Rich text'),5:__tr('Image'),6:__tr('Hyperlink'),7:__tr('Enumeration'),8:__tr('Username'),9:__tr('Region'),10:__tr('Indicator'),11:__tr('Time'),12:__tr('Measure'),13:__tr('Measure sid'),14:__tr('Enumeration'),15:__tr('Video code'),16:__tr('Automatically incrementing id'),17:__tr('Position'),18:__tr('Chart'),19:__tr('Document'),20:__tr('Boolean'),21:__tr('Application sid')};Cms.Column=function(table,col){Ext.apply(this,col);this.table=table;if(this.checks){for(var i=0;i<this.checks.length;++i){var chk=this.checks[i]=this.table.checks[this.checks[i]];chk.cols.push(this);}}};Cms.Column.prototype={fixReferences:function(){if(this.masterColumnSid){var rc=this.table.columnsBySid[this.masterColumnSid];if(rc){this.masterColumn=rc;}
delete this.masterColumnSid;}},qname:function(){return'"'+this.table.name+'"."'+this.name+'"';},qcname:function(){return'"'+this.name+'"';}};Cms.EnumeratedColumn=function(table,config){Cms.EnumeratedColumn.superclass.constructor.call(this,table,config);this.enumeratedById={};for(var i=0;i<this.enumeratedValues.length;++i){var ee=this.enumeratedValues[i];this.enumeratedById[ee.value]=ee.description;}}
Ext.extend(Cms.EnumeratedColumn,Cms.Column,{});Cms.FileColumn=function(table,config){Cms.FileColumn.superclass.constructor.call(this,table,config);}
Ext.extend(Cms.FileColumn,Cms.Column,{fixReferences:function(){if(this.mimeColumnSid){var rc=this.table.columnsBySid[this.mimeColumnSid];if(rc){this.mimeColumn=rc;}
delete this.mimeColumnSid;}
if(this.nameColumnSid){var rc=this.table.columnsBySid[this.nameColumnSid];if(rc){this.nameColumn=rc;}
delete this.nameColumnSid;}}});Cms.MeasureColumn=function(table,config){Cms.MeasureColumn.superclass.constructor.call(this,table,config);}
Ext.extend(Cms.MeasureColumn,Cms.Column,{});Cms.MeasureSidColumn=function(table,config){Cms.MeasureSidColumn.superclass.constructor.call(this,table,config);}
Ext.extend(Cms.MeasureSidColumn,Cms.Column,{});Cms.Table=function(tab,sch){Ext.apply(this,tab);if(this.checks){for(var cid in this.checks){if(!this.checks.hasOwnProperty(cid))
continue;this.checks[cid]=new Cms.Check(this.checks[cid]);}}
this.owner=this.schema;this.schema=sch||null;this.columnsBySid={};this.columnsByName={};for(var i=0;i<this.columns.length;++i){var cd=this.columns[i];var col;switch(cd.colType){case ColType.Enumerated:col=new Cms.EnumeratedColumn(this,cd);break;case ColType.FileData:col=new Cms.FileColumn(this,cd);break;case ColType.Measure:col=new Cms.MeasureColumn(this,cd);break;case ColType.MeasureSid:col=new Cms.MeasureSidColumn(this,cd);break;default:col=new Cms.Column(this,cd);break;}
this.columns[i]=col;this.columnsBySid[col.sid]=col;this.columnsByName[col.name]=col;}};Cms.Table.load=function(tabSid,callback,scope){GridHandler.getTableDefinition(tabSid,function(data){callback.call(scope,new Cms.Table(data,null));});};Cms.Table.prototype={qname:function(){return'"'+this.owner+'"."'+this.name+'"';},findColumn:function(name){name=name.replace(/^(("([^"]*)")|([^"]*))$/,"$3$4");if(this.columnsByName.hasOwnProperty(name)){return this.columnsByName[name];}
return null;}};Cms.CmsSchema=function(sch){Ext.apply(this,sch);var ambiguousTableNames={};this.tablesByName={};this.tablesByNameLoose={};this.tablesBySid={};this.columnsBySid={};for(var i=0;i<this.tables.length;++i){var tab=this.tables[i]=new Cms.Table(this.tables[i],this);this.tablesBySid[tab.sid]=tab;this.tablesByName[tab.qname()]=tab;var looseName=tab.name.toLowerCase();if(!ambiguousTableNames.hasOwnProperty(looseName)){if(this.tablesByNameLoose.hasOwnProperty(looseName)){delete this.tablesByNameLoose[looseName];ambiguousTableNames[looseName]=true;}else{this.tablesByNameLoose[looseName]=tab;}}
for(var k in tab.columnsBySid){if(tab.columnsBySid.hasOwnProperty(k)){this.columnsBySid[k]=tab.columnsBySid[k];}}}
for(var k in this.columnsBySid){if(!this.columnsBySid.hasOwnProperty(k)){continue;}
var c=this.columnsBySid[k];c.fixReferences();delete c.fixReferences;}
this.uks={};this.fks={};for(var k in this.tablesBySid){if(!this.tablesBySid.hasOwnProperty(k)){continue;}
var tab=this.tablesBySid[k];for(var i=0;i<tab.uks.length;++i){var uk=tab.uks[i];this.uks[uk.id]=uk;for(var j=0;j<uk.columns.length;++j){uk.columns[j]=this.columnsBySid[uk.columns[j]];}
uk.children=[];uk.table=tab;}
if(tab.pk){tab.pk=this.uks[tab.pk];}}
for(var k in this.tablesBySid){if(!this.tablesBySid.hasOwnProperty(k)){continue;}
var tab=this.tablesBySid[k];for(var i=0;i<tab.fks.length;++i){var fk=tab.fks[i];this.fks[fk.id]=fk;for(var j=0;j<fk.columns.length;++j){fk.columns[j]=this.columnsBySid[fk.columns[j]];}
if(!this.uks.hasOwnProperty(fk.parent)){throw"The foreign key with id "+fk.id+" has a missing parent unique key with id "+fk.parent;}
var parent=this.uks[fk.parent];fk.parent=parent;fk.table=tab;parent.children.push(fk);}}};Cms.CmsSchema.prototype={findTable:function(tableName){var tab=this.tablesByName[tableName];if(tab){return tab;}
tab=this.tablesByNameLoose[tableName.toLowerCase()];if(tab){return tab;}
throw"The table named "+tableName+" could not be found in the schema or has an ambiguous name";}};Cms.CmsSchema.__instance=null;Cms.CmsSchema.get=function(){return Cms.CmsSchema.__instance;}
Cms.CmsSchema.load=function(callback,scope){GridHandler.getSchema(function(data){Cms.CmsSchema.__instance=new Cms.CmsSchema(data);callback.call(scope,Cms.CmsSchema.__instance);});};Cms.CmsSchema.loadWithCSR=function(callback,scope){GridHandler.getSchemaAndCSRInfo(function(data){Cms.CmsSchema.__instance=new Cms.CmsSchema(data.schema);callback.call(scope,Cms.CmsSchema.__instance,data.csr);});};Cms.parseDotted=function(dotted){var result=[];var re=/(("([^"]*)")|([^"][^\.]*))(\.?)/g;var m;while(m=re.exec(dotted)){var name=m[3]||m[4];if(!name){throw"Empty name component in "+dotted;}
result.push(name);}
return result;};Cms.Keys=function(config){this.setFrom(config);};Cms.Keys.prototype={clone:function(){return new Cms.Keys(this);},extract:function(toExtract,extractAs){if(!extractAs){extractAs=toExtract;}
var key=new Cms.Keys();for(var i=0;i<toExtract.columns.length;++i){key.set(extractAs.table.qname(),extractAs.columns[i].qcname(),this.get(toExtract.table.qname(),toExtract.columns[i].qcname()));}
return key;},extractKeysForTable:function(table){var keys=new Cms.Keys();var tab=g_schema.findTable(table);if(tab){table=tab.qname();}
if(!this.data.hasOwnProperty(table)){return keys;}
var tableKeys=this.data[table];for(var colKey in tableKeys){if(!tableKeys.hasOwnProperty(colKey)){continue;}
keys.set(table,colKey,tableKeys[colKey]);}
return keys;},hasKey:function(key){if(!this.data.hasOwnProperty(key.table.qname()))
return false;var tkeys=this.data[key.table.qname()];for(var i=0;i<key.columns.length;++i){if(!tkeys.hasOwnProperty(key.columns[i].qcname())){return false;}}
return true;},hasSameStructure:function(other){var match=true;this.each(function(keys,tableKey,colKey){if(!other.has(tableKey,colKey)){match=false;return false;}});other.each(function(keys,tableKey,colKey){if(!this.has(tableKey,colKey)){match=false;return false;}},this);return match;},disambiguate:function(table,column){var tab=g_schema.findTable(table);if(tab){table=tab.qname();if(column){var col=tab.findColumn(column);if(col){column=col.qcname();}}}
if(column){return{table:table,column:column};}else{return{table:table};}},has:function(table,column){var tc=this.disambiguate(table,column);return this.data.hasOwnProperty(tc.table)&&this.data[tc.table].hasOwnProperty(tc.column);},hasTable:function(table){var tc=this.disambiguate(table,column);return this.data.hasOwnProperty(tc.table);},get:function(table,column){var tc=this.disambiguate(table,column);if(this.data.hasOwnProperty(tc.table)&&this.data[tc.table].hasOwnProperty(tc.column)){return this.data[tc.table][tc.column];}
return null;},set:function(table,column,value){var tc=this.disambiguate(table,column);if(!this.data.hasOwnProperty(tc.table)){this.data[tc.table]={};}
this.data[tc.table][tc.column]=value;},each:function(fn,scope){for(var tableKey in this.data){if(!this.data.hasOwnProperty(tableKey)){continue;}
var tableKeys=this.data[tableKey];for(var colKey in tableKeys){if(!tableKeys.hasOwnProperty(colKey)){continue;}
if(fn.call(scope,this,tableKey,colKey,tableKeys[colKey])===false)
return;}}},makeTableKeys:function(tableName){var tc=this.disambiguate(tableName);var fetchKeys=[];if(this.data.hasOwnProperty(tc.table)){var tableKeys=this.data[tc.table];for(var tableKey in tableKeys){if(!tableKeys.hasOwnProperty(tableKey)){continue;}
fetchKeys.push({name:tableKey,value:tableKeys[tableKey]});}}
return fetchKeys;},setFrom:function(other){this.data={};if(other instanceof Cms.Keys){Ext.apply(this.data,other.data);}else{for(var tableKey in other){if(!other.hasOwnProperty(tableKey)){continue;}
var tab=g_schema.findTable(tableKey);var myTableKey=tableKey;if(tab){myTableKey=tab.qname();}
var colData=other[tableKey];var myColData=this.data[myTableKey]={};for(var colKey in colData){if(!colData.hasOwnProperty(colKey)){continue;}
var myColKey=colKey;if(tab){var col=tab.findColumn(colKey);if(col){myColKey='"'+col.name+'"';}}
myColData[myColKey]=colData[colKey];}}}},toString:function(){var s="{\n";var firstTableKey=true;for(var tableKey in this.data){if(!this.data.hasOwnProperty(tableKey)){continue;}
if(!firstTableKey){s+="  },\n";}
firstTableKey=false;s+="  '"+tableKey+"': {\n";var tableKeys=this.data[tableKey];var firstColKey=true;for(var colKey in tableKeys){if(!tableKeys.hasOwnProperty(colKey)){continue;}
if(!firstColKey){s+=",\n";}
firstColKey=false;s+="    '"+colKey+"': "+tableKeys[colKey];}
if(!firstColKey){s+="\n";}}
if(!firstTableKey){s+="  }\n";}
s+="}\n";return s;}};Cms.Check=function(code){this.check=new Function("_get,_msg","if (("+code+")!==false) return true; return _msg;");this.cols=[];};Cms.Check.prototype={_lt:function(a,b){if(a===null||b===null)
return null;return a<b;},_lte:function(a,b){if(a===null||b===null)
return null;return a<=b;},_gt:function(a,b){if(a===null||b===null)
return null;return a>b;},_gte:function(a,b){if(a===null||b===null)
return null;return a>=b;},_eq:function(a,b){if(a===null||b===null)
return null;return a==b;},_ne:function(a,b){if(a===null||b===null)
return null;return a!=b;},_nullIf:function(a,b){if(a==b)
return null;return a;},_nvl:function(a,b){if(this._isNull(a))
return b;return a;},_trunc:function(a,b){if(this._isNull(a)){return a;}
if(a instanceof Date){if(!b){b="DD";}
switch(b){case"SYYYY":case"YYYY":case"YEAR":case"SYEAR":case"YYY":case"YY":case"Y":a=new Date(a.getFullYear(),0,1);break;case"CC":case"SCC":a=new Date(1+Math.floor(year/1000)*1000,0,1);break;case"Q":{var m=a.getMonth()+1;m=m<4?1:m<7?4:m<10?7:10;a=new Date(a.getFullYear(),m-1,1);break;}
case"HH":case"HH12":case"HH24":a=new Date(a.getFullYear(),a.getMonth(),a.getDay(),a.getHour());break;case"MONTH":case"MON":case"MM":case"RM":a=new Date(a.getFullYear(),a.getMonth(),1);break;case"DDD":case"DD":case"D":a=new Date(a.getFullYear(),a.getMonth(),a.getDay());break;case"IYYY":case"IY":case"IY":case"I":case"WW":case"IW":case"W":case"DAY":case"DY":case"D":default:throw"unsupported trunc format: "+b;}
return a;}
if(typeof(a)!="number"){a=Date.parseFloat(a);if(isNaN(a)){throw"_trunc requires a date or number";}}
if(!b){b=0;}
var scale=Math.pow(10,b);return Math.round(num*scale)/scale;},_coalesce:function(){var a=arguments,len=a.length;if(!len){throw"_coalesce with no arguments";}
for(var i=0;i<len;i++){if(a[i]!==null)
return a[i];}
return a[0];},_concat:function(a,b){return(''+a)+b;},_trim:function(a){return(''+a).replace(/^\s+|\s+$/g,"");},_ltrim:function(a){return(''+a).replace(/^\s+/,"");},_rtrim:function(a){return(''+a).replace(/\s+$/,"");},_upper:function(a){return(''+a).toUpperCase();},_lower:function(a){return(''+a).toLowerCase();},_compRV:function(l,comp,r){if(l.length!=r.length){throw"comparing rowvals of unequal length";}
for(var i=0;i<l.length;++i){if(Ext.isArray(l[i])){return _compRV(l[i],comp,r[i]);}
if(!comp(l[i],r[i])){return false;}}
return true;},_isNull:function(v,neg){if(Ext.isArray(v)){for(var i=0;i<v.length;++i){if(!this._isNull(v[i],neg))
return false;}
return true;}
var res=(v===null||(typeof(v)==="string"&&v.length===0));if(neg)
return!res;return res;},_in:function(val,arr){if(val.length!=1){throw"in predicate must have a rowval of length 1";}
val=val[0];if(val===null)
return null;for(var i=0;i<arr.length;++i){if(arr[i]===null)
continue;if(this._eq(val,arr[i]))
return true;}
return false;},_between:function(val,lower,upper){if(val.length!=lower.length||val.length!=upper.length){throw"cannot compare rowvals of differing lengths";}
var r=this._compare(val,this._gte,lower);if(r===null||r===false)
return false;var r=this._compare(val,this._lte,upper);if(r===null)
return false;return r;},_like:function(val,pattern,escape){var s='^';var escapeChar=escape!=null?escape[0]:0;for(var i=0;i<pattern.length;++i){var c=pattern[i];if(c=='%'){s+=".*";}else if(c=='_'){s+=".";}else{if(escape!=null&&c==escapeChar){if(i+1>=patternlength){throw"Escape "+escapeChar+" with no following character in LIKE pattern";}
c=pattern[++i];}
if(".$^{[(|)*+?\\".indexOf(c)!=-1){s+='\\';}
s+=c;}}
s+='$';var re=new RegExp(s,"gm");return re.test(val);},_simpleCase:function(){var a=arguments,len=a.length;var v=a[0];for(var i=1;i<len-1;i+=2){if(_eq(v,a[i]))
return a[i+1];}
return a[len-1];},_searchedCase:function(){var a=arguments,len=a.length;for(var i=0;i<len-1;i+=2){if(a[i]===true)
return a[i+1];}
return a[len-1];}};}());