Spry.Data.HTMLDataSet=function(a,b,c){this.sourceElementID=b;this.sourceElement=null;this.sourceWasInitialized=false;this.usesExternalFile=(a!=null)?true:false;this.firstRowAsHeaders=true;this.useColumnsAsRows=false;this.columnNames=null;this.hideDataSourceElement=true;this.rowSelector=null;this.dataSelector=null;this.removeUnbalancedRows=true;this.tableModeEnabled=true;Spry.Data.HTTPSourceDataSet.call(this,a,c)};Spry.Data.HTMLDataSet.prototype=new Spry.Data.HTTPSourceDataSet();Spry.Data.HTMLDataSet.prototype.constructor=Spry.Data.HTMLDataSet;Spry.Data.HTMLDataSet.prototype.getDataRefStrings=function(){var a=[];if(this.url)a.push(this.url);if(typeof this.sourceElementID=="string")a.push(this.sourceElementID);return a};Spry.Data.HTMLDataSet.prototype.setDisplay=function(a,b){if(a)a.style.display=b};Spry.Data.HTMLDataSet.prototype.initDataSource=function(a){if(!this.loadDependentDataSets())return;if(!this.usesExternalFile){this.setSourceElement();if(this.hideDataSourceElement)this.setDisplay(this.sourceElement,"none")}};Spry.Data.HTMLDataSet.prototype.setSourceElement=function(b){this.sourceElement=null;if(!this.sourceElementID){if(b)this.sourceElement=b;else{this.hideDataSourceElement=false;this.sourceElement=document.body}return}var c=Spry.Data.Region.processDataRefString(null,this.sourceElementID,this.dataSetsForDataRefStrings);if(!this.usesExternalFile)this.sourceElement=Spry.$(c);else if(b){var d=false;var e=Spry.Utils.getNodesByFunc(b,function(a){if(d)return false;if(a.nodeType!=1)return false;if(a.id&&a.id.toLowerCase()==c.toLowerCase()){d=true;return true}});this.sourceElement=e[0]}if(!this.sourceElement)Spry.Debug.reportError("Spry.Data.HTMLDataSet: '"+c+"' is not a valid element ID")};Spry.Data.HTMLDataSet.prototype.getSourceElement=function(){return this.sourceElement};Spry.Data.HTMLDataSet.prototype.getSourceElementID=function(){return this.sourceElementID};Spry.Data.HTMLDataSet.prototype.setSourceElementID=function(a){if(this.sourceElementID!=a){this.sourceElementID=a;this.recalculateDataSetDependencies();this.dataWasLoaded=false}};Spry.Data.HTMLDataSet.prototype.getDataSelector=function(){return this.dataSelector};Spry.Data.HTMLDataSet.prototype.setDataSelector=function(a){if(this.dataSelector!=a){this.dataSelector=a;this.dataWasLoaded=false}};Spry.Data.HTMLDataSet.prototype.getRowSelector=function(){return this.rowSelector};Spry.Data.HTMLDataSet.prototype.setRowSelector=function(a){if(this.rowSelector!=a){this.rowSelector=a;this.dataWasLoaded=false}};Spry.Data.HTMLDataSet.prototype.loadDataIntoDataSet=function(a){var b=a;b=Spry.Data.HTMLDataSet.cleanupSource(b);var c=document.createElement("div");c.id="htmlsource"+this.internalID;c.innerHTML=b;this.setSourceElement(c);if(this.sourceElement){var d=this.getDataFromSourceElement();if(d){this.dataHash=d.dataHash;this.data=d.data}}this.dataWasLoaded=true;c=null};Spry.Data.HTMLDataSet.prototype.loadDependentDataSets=function(){if(this.hasDataRefStrings){var a=true;for(var i=0;i<this.dataSetsForDataRefStrings.length;i++){var b=this.dataSetsForDataRefStrings[i];if(b.getLoadDataRequestIsPending())a=false;else if(!b.getDataWasLoaded()){b.loadData();a=false}}if(!a)return false}return true};Spry.Data.HTMLDataSet.prototype.loadData=function(){this.cancelLoadData();this.initDataSource();var b=this;if(!this.usesExternalFile){this.notifyObservers("onPreLoad");this.dataHash=new Object;this.data=new Array;this.dataWasLoaded=false;this.unfilteredData=null;this.curRowID=0;this.pendingRequest=new Object;this.pendingRequest.timer=setTimeout(function(){b.pendingRequest=null;var a=b.getDataFromSourceElement();if(a){b.dataHash=a.dataHash;b.data=a.data}b.dataWasLoaded=true;b.disableNotifications();b.filterAndSortData();b.enableNotifications();b.notifyObservers("onPostLoad");b.notifyObservers("onDataChanged")},0)}else{var c=Spry.Data.Region.processDataRefString(null,this.url,this.dataSetsForDataRefStrings);var d=this.requestInfo.postData;if(d&&(typeof d)=="string")d=Spry.Data.Region.processDataRefString(null,d,this.dataSetsForDataRefStrings);this.notifyObservers("onPreLoad");this.dataHash=new Object;this.data=new Array;this.dataWasLoaded=false;this.unfilteredData=null;this.curRowID=0;var e=this.requestInfo.clone();e.url=c;e.postData=d;this.pendingRequest=new Object;this.pendingRequest.data=Spry.Data.HTTPSourceDataSet.LoadManager.loadData(e,this,this.useCache)}};Spry.Data.HTMLDataSet.cleanupSource=function(d){d=d.replace(/<(img|script|link|frame|iframe|input)([^>]+)>/gi,function(a,b,c){return'<'+b+c.replace(/\b(src|href)\s*=/gi,function(a,b){return'spry_'+b+'='})+'>'});return d};Spry.Data.HTMLDataSet.undoCleanupSource=function(d){d=d.replace(/<(img|script|link|frame|iframe|input)([^>]+)>/gi,function(a,b,c){return'<'+b+c.replace(/\bspry_(src|href)\s*=/gi,function(a,b){return b+'='})+'>'});return d};Spry.Data.HTMLDataSet.normalizeColumnName=function(a){if(a){a=a.replace(/(?:^[\s\t]+|[\s\t]+$)/gi,"");a=a.replace(/<\/?([a-z]+)([^>]+)>/gi,"");a=a.replace(/[\s\t]+/gi,"_")}return a};Spry.Data.HTMLDataSet.prototype.getDataFromSourceElement=function(){if(!this.sourceElement)return null;var a;var b=(this.tableModeEnabled&&this.sourceElement.nodeName.toLowerCase()=="table");if(b)a=this.getDataFromHTMLTable();else a=this.getDataFromNestedStructure();if(!a)return null;if(this.useColumnsAsRows){var c=new Array;for(var d=0;d<a.length;d++){var e=a[d];for(var f=0;f<e.length;f++){if(!c[f])c[f]=new Array;c[f][d]=e[f]}}a=c}var g=new Object();g.dataHash=new Object;g.data=new Array;if(a.length==0)return g;var h=0;for(var i=0;i<a.length;i++){var j=a[i].length;if(h<j)h=j}var k=new Array;var l=a[0];for(var f=0;f<h;f++){if(b&&this.firstRowAsHeaders)k[f]=Spry.Data.HTMLDataSet.normalizeColumnName(l[f]);if(!k[f])k[f]="column"+f}if(this.columnNames&&this.columnNames.length){var m=(h<this.columnNames.length)?h:this.columnNames.length;for(var i=0;i<m;i++){if(this.columnNames[i])k[i]=this.columnNames[i]}}var n=0;var o=(b&&this.firstRowAsHeaders)?1:0;for(var d=o;d<a.length;d++){var e=a[d];if(this.removeUnbalancedRows&&k.length!=e.length){continue}var p={};for(var f=0;f<k.length;f++){var q=e[f];p[k[f]]=(typeof q=="undefined")?"":q}p['ds_RowID']=n++;g.dataHash[p['ds_RowID']]=p;g.data.push(p)}return g};Spry.Data.HTMLDataSet.getElementChildren=function(a){var b=[];var c=a.firstChild;while(c){if(c.nodeType==1)b.push(c);c=c.nextSibling}return b};Spry.Data.HTMLDataSet.prototype.getDataFromHTMLTable=function(){var a=this.sourceElement.tHead;var b=this.sourceElement.tBodies[0];var c=[];var d=[];if(a)c=Spry.Data.HTMLDataSet.getElementChildren(a);if(b)d=Spry.Data.HTMLDataSet.getElementChildren(b);var e=new Array;var f=c.concat(d);if(this.rowSelector)f=Spry.Data.HTMLDataSet.applySelector(f,this.rowSelector);for(var g=0;g<f.length;g++){var h=f[g];var i;if(e[g])i=e[g];else i=new Array;var j=0;var k=h.cells;if(this.dataSelector)k=Spry.Data.HTMLDataSet.applySelector(k,this.dataSelector);for(var l=0;l<k.length;l++){var m=k[l];var n=l+j;while(i[n]){j++;n++}var o=Spry.Data.HTMLDataSet.undoCleanupSource(m.innerHTML);i[n]=o;var p=m.colSpan;if(p==0)p=1;var q=j;for(var r=1;r<p;r++){j++;n=l+j;i[n]=o}var s=m.rowSpan;if(s==0)s=1;for(var t=1;t<s;t++){nextRowIndex=g+t;var u;if(e[nextRowIndex])u=e[nextRowIndex];else u=new Array;var v=q;for(var r=0;r<p;r++){n=l+v;u[n]=o;v++}e[nextRowIndex]=u}}e[g]=i}return e};Spry.Data.HTMLDataSet.prototype.getDataFromNestedStructure=function(){var b=new Array;if(this.sourceElementID&&!this.rowSelector&&!this.dataSelector){b[0]=[Spry.Data.HTMLDataSet.undoCleanupSource(this.sourceElement.innerHTML)];return b}var c=this;var d=[];if(!this.rowSelector)d=[this.sourceElement];else d=Spry.Utils.getNodesByFunc(this.sourceElement,function(a){return Spry.Data.HTMLDataSet.evalSelector(a,c.sourceElement,c.rowSelector)});for(var e=0;e<d.length;e++){var f=d[e];var g=[];if(!this.dataSelector)g=[f];else g=Spry.Utils.getNodesByFunc(f,function(a){return Spry.Data.HTMLDataSet.evalSelector(a,f,c.dataSelector)});b[e]=new Array;for(var h=0;h<g.length;h++)b[e][h]=Spry.Data.HTMLDataSet.undoCleanupSource(g[h].innerHTML)}return b};Spry.Data.HTMLDataSet.applySelector=function(a,b,c){var d=[];for(var e=0;e<a.length;e++){var f=a[e];if(Spry.Data.HTMLDataSet.evalSelector(f,c?c:f.parentNode,b))d.push(f)}return d};Spry.Data.HTMLDataSet.evalSelector=function(a,b,c){if(a.nodeType!=1)return false;if(a==b)return false;var d=c.split(",");for(var e=0;e<d.length;e++){var f=d[e].replace(/^\s+/,"").replace(/\s+$/,"");var g=null;var h=null;var i=null;var j=true;if(f.substring(0,1)==">"){if(a.parentNode!=b)j=false;else f=f.substring(1).replace(/^\s+/,"")}if(j){g=f.toLowerCase();if(f.indexOf(".")!=-1){var k=f.split(".");g=k[0];h=k[1]}else if(f.indexOf("#")!=-1){var k=f.split("#");g=k[0];i=k[1]}}if(j&&g!=''&&g!='*')if(a.nodeName.toLowerCase()!=g)j=false;if(j&&i&&a.id!=i)j=false;if(j&&h&&a.className.search(new RegExp('\\b'+h+'\\b','i'))==-1)j=false;if(j)return true}return false};
