/** * Miso.Dataset - v0.4.1 - 6/24/2014 * http://github.com/misoproject/dataset * Copyright (c) 2014 Alex Graul, Irene Ros; * Dual Licensed: MIT, GPL * https://github.com/misoproject/dataset/blob/master/LICENSE-MIT * https://github.com/misoproject/dataset/blob/master/LICENSE-GPL */ (function(t){t.Miso=t.Miso||{},t.Miso.Dataset=function(t){t=t||{},this.length=0,this._columns=[],this._columnPositionByName={},this._computedColumns=[],this._initialize(t)}})(this),function(t,_){var e=t.Miso||(t.Miso={}),i=t.Miso.Dataset;i.Column=function(t){return _.extend(this,t),this._id=t.id||_.uniqueId(),this.data=t.data||[],this},_.extend(i.Column.prototype,{toNumeric:function(t){return i.types[this.type].numeric(t)},numericAt:function(t){return this.toNumeric(this.data[t])},coerce:function(){this.data=_.map(this.data,function(t){return i.types[this.type].coerce(t,this)},this)},compute:function(t,e){if(this.func){var i=this.func(t);return e!==void 0?this.data[e]=i:this.data.push(i),i}},isComputed:function(){return!_.isUndefined(this.func)},_sum:function(){return _.sum(this.data)},_mean:function(){for(var t=0,e=0;this.data.length>e;e++)t+=this.numericAt(e);return t/=this.data.length,i.types[this.type].coerce(t,this)},_median:function(){return i.types[this.type].coerce(_.median(this.data),this)},_max:function(){for(var t=-1/0,e=0;this.data.length>e;e++)null!==this.data[e]&&i.types[this.type].compare(this.data[e],t)>0&&(t=this.numericAt(e));return i.types[this.type].coerce(t,this)},_min:function(){for(var t=1/0,e=0;this.data.length>e;e++)null!==this.data[e]&&0>i.types[this.type].compare(this.data[e],t)&&(t=this.numericAt(e));return i.types[this.type].coerce(t,this)}}),i.DataView=function(t){if(t!==void 0){if(t=t||(t={}),_.isUndefined(t.parent))throw Error("A view must have a parent specified.");this.parent=t.parent,this._initialize(t)}},_.extend(i.DataView.prototype,{_initialize:function(t){this.parent.syncable===!0&&(_.extend(this,e.Events),this.syncable=!0),this.idAttribute=this.parent.idAttribute,this.filter={},this.filter.columns=_.bind(this._columnFilter(t.filter.columns||void 0),this),this.filter.rows=_.bind(this._rowFilter(t.filter.rows||void 0),this),this._columns=this._selectData(),i.Builder.cacheColumns(this),i.Builder.cacheRows(this),this.syncable&&this.parent.subscribe("change",this._sync,{context:this})},_sync:function(t){var e=t.deltas,n=null;_.each(e,function(e,s){var r=this._rowPositionById[e[this.idAttribute]];if(r===void 0&&i.Event.isAdd(e))this.filter.rows&&this.filter.rows(e.changed)&&(this._add(e.changed),n="add");else{if("undefined"===r)return;_.each(e.changed,function(t,e){var i=this._columnPositionByName[e];_.isUndefined(i)||(this._columns[i].data[r]=t,n="update")},this)}var o=this.rowByPosition(r);if(i.Event.isRemove(e)||this.filter.row&&!this.filter.row(o)){var a={old:this.rowByPosition(r),changed:{}};a[this.idAttribute]=e[this.idAttribute],t.deltas.splice(s,1,a),this._remove(r),n="delete"}},this),this.syncable&&(this.publish(n,t),this.publish("change",t))},where:function(t,e){return e=e||{},e.filter=e.filter||{},_.isFunction(t)?e.filter.rows=t:e.filter=t,e.parent=this,new i.DataView(e)},_selectData:function(){var t=[];return _.each(this.parent._columns,function(e){this.filter.columns(e)&&t.push(new i.Column({name:e.name,data:[],type:e.type,_id:e._id}))},this),this.parent.each(function(e){if(this.filter.rows(e))for(var i=0;t.length>i;i++)t[i].data.push(e[t[i].name])},this),t},_columnFilter:function(t){var e;return _.isUndefined(t)?e=function(){return!0}:(_.isString(t)&&(t=[t]),t.push(this.idAttribute),e=function(e){return-1===_.indexOf(t,e.name)?!1:!0}),e},_rowFilter:function(t){var e;return _.isNumber(t)&&(t=[t]),e=_.isUndefined(t)?function(){return!0}:_.isFunction(t)?t:_.bind(function(e){return-1===_.indexOf(t,e[this.idAttribute])?!1:!0},this)},column:function(t){return this._column(t)},_column:function(t){if(_.isUndefined(this._columnPositionByName))return void 0;var e=this._columnPositionByName[t];return this._columns[e]},columns:function(t){return new i.DataView({filter:{columns:t},parent:this})},columnNames:function(){var t=_.pluck(this._columns,"name");return _.reject(t,function(t){return t===this.idAttribute||"_oids"===t},this)},hasColumn:function(t){return!_.isUndefined(this._columnPositionByName[t])},each:function(t,e){for(var i=0;this.length>i;i++)t.apply(e||this,[this.rowByPosition(i),i])},reverseEach:function(t,e){for(var i=this.length-1;i>=0;i--)t.apply(e||this,[this.rowByPosition(i),i])},eachColumn:function(t,e){for(var i=this.columnNames(),n=0;i.length>n;n++)t.apply(e||this,[i[n],this.column(i[n]),n])},rowByPosition:function(t){return this._row(t)},rowById:function(t){return this._row(this._rowPositionById[t])},_row:function(t){var e={};return _.each(this._columns,function(i){e[i.name]=i.data[t]}),e},_remove:function(t){var e=this._rowPositionById[t];return _.each(this._columns,function(t){t.data.splice(e,1)}),delete this._rowPositionById[t],this._rowIdByPosition.splice(e,1),this.length--,this},_add:function(t){if(_.each(t,function(e,n){var s=this.column(n);if(s.isComputed())throw"You're trying to update a computed column. Those get computed!";if(s!==void 0){var r=i.types[s.type];if(!s.force&&!r.test(t[s.name],s))throw"incorrect value '"+t[s.name]+"' of type "+i.typeOf(t[s.name],s)+" passed to column '"+s.name+"' with type "+s.type;_.isUndefined(s.before)||(t[s.name]=s.before(t[s.name])),t[s.name]=r.coerce(t[s.name],s)}},this),this._computedColumns&&_.each(this._computedColumns,function(e){var i=e.compute(t);t[e.name]=i}),_.isUndefined(this.comparator)){if(_.each(this._columns,function(e){e.isComputed()||e.data.push(_.isUndefined(t[e.name])||_.isNull(t[e.name])?null:t[e.name])}),this.length++,this._rowIdByPosition=this._rowIdByPosition||(this._rowIdByPosition=[]),this._rowPositionById=this._rowPositionById||(this._rowPositionById={}),this._rowPositionById[t[this.idAttribute]]!==void 0)throw"The id "+t[this.idAttribute]+" is not unique. The "+this.idAttribute+" column must be unique";this._rowPositionById[t[this.idAttribute]]=this._rowIdByPosition.length,this._rowIdByPosition.push(t[this.idAttribute])}else{var e,n=function(t,e,i){Array.prototype.splice.apply(i,[t,0].concat(e))};for(this.length++,e=0;this.length>e;e++){var s=this.rowByPosition(e);if(_.isUndefined(s[this.idAttribute])||0>this.comparator(t,s)){_.each(this._columns,function(i){n(e,t[i.name]?t[i.name]:null,i.data)});break}}this._rowIdByPosition=[],this._rowPositionById={},this.each(function(t,e){this._rowIdByPosition.push(t[this.idAttribute]),this._rowPositionById[t[this.idAttribute]]=e},this)}return this},rows:function(t){return new i.DataView({filter:{rows:t},parent:this})},sort:function(t){var e={},i=[];if(_.isFunction(t)?e.comparator=t:e=t||{},e.comparator)this.comparator=e.comparator;else if(_.isUndefined(this.comparator))throw Error("Cannot sort without this.comparator.");var n,s,r;for(n=0;this.length>n;n++)i[n]=this._row(n);for(i.sort(this.comparator),n=i.length;n--;)for(r=i[n],this._rowIdByPosition[n]=r[this.idAttribute],this._rowPositionById[r[this.idAttribute]]=n,s=this._columns.length;s--;){var o=this._columns[s];o.data[n]=r[o.name]}return this.syncable&&!e.silent&&this.publish("sort"),this},toJSON:function(){for(var t=[],e=0;this.length>e;e++)t.push(this.rowByPosition(e));return t}})}(this,_),function(t,_){var e=t.Miso||(t.Miso={}),i=t.Miso.Dataset;i.prototype=new i.DataView,_.extend(i.prototype,{_initialize:function(t){t.sync===!0&&(_.extend(this,e.Events),this.syncable=!0),this.idAttribute=t.idAttribute||"_id",this.importer=t.importer||null,this.parser=t.parser||i.Parsers.Obj,_.isUndefined(t.parser)&&(t.strict?this.parser=i.Parsers.Strict:t.delimiter&&(this.parser=i.Parsers.Delimited)),null===this.importer&&(t.url?t.interval?(this.importer=i.Importers.Polling,this.interval=t.interval):this.importer=i.Importers.Remote:this.importer=i.Importers.Local),this.parser=new this.parser(t),this.parser instanceof i.Parsers.Delimited&&(t.dataType="text"),this.importer=new this.importer(t),t.comparator&&(this.comparator=t.comparator),t.ready&&(this.ready=t.ready),t.resetOnFetch&&(this.resetOnFetch=t.resetOnFetch),t.uniqueAgainst&&(this.uniqueAgainst=t.uniqueAgainst),_.isUndefined(t.data)&&_.isUndefined(t.url)&&this._addIdColumn(),this.deferred=t.deferred?t.deferred:new _.Deferred,t.columns&&this.addColumns(t.columns)},fetch:function(t){t=t||{};var e=this.deferred;if(_.isNull(this.importer))throw"No importer defined";return this.importer.fetch({success:_.bind(function(i){try{this._apply(i)}catch(n){if(!t.error)throw n;t.error.call(this,n)}this.comparator&&this.sort(),this.ready&&this.ready.call(this),t.success&&t.success.call(this),e.resolveWith(this,[this])},this),error:_.bind(function(i){t.error&&t.error.call(this,i),e.reject(i)},this)}),e.promise()},_applications:{againstColumn:function(t){var e=(_.keys(t),this.uniqueAgainst),n=this.column(e),s=[],r=[];_.each(t[e],function(e,o){var a=n.data.indexOf(i.types[n.type].coerce(e)),u={};_.each(t,function(t,e){u[e]=t[o]}),-1===a?s.push(u):(r.push(u),u[this.idAttribute]=this.rowById(this.column(this.idAttribute).data[a])[this.idAttribute],this.update(u))},this),s.length>0&&this.add(s)},blind:function(t){for(var e,i=[],n=_.keys(t),s=_.max(_.map(n,function(e){return t[e].length},this)),r=0;s>r;r++){e={};for(var o=0;n.length>o;o++)e[n[o]]=t[n[o]][r];i.push(e)}this.add(i)}},_apply:function(t){var e=this.parser.parse(t);if(this.fetched)if(this.resetOnFetch)this.reset(),this._applications.blind.call(this,e.data);else if(this.uniqueAgainst){if(!this.hasColumn(this.uniqueAgainst))throw Error("You requested a unique add against a column that doesn't exist.");this._applications.againstColumn.call(this,e.data)}else this._applications.blind.call(this,e.data);else this._addIdColumn(),this.addColumns(_.map(e.columns,function(t){return{name:t}})),i.Builder.detectColumnTypes(this,e.data),this._applications.blind.call(this,e.data),this.fetched=!0;i.Builder.cacheRows(this)},addColumns:function(t){_.each(t,function(t){this.addColumn(t)},this)},addComputedColumn:function(t,e,n){if(_.isUndefined(this.column(t))){if(i.types[e]===void 0)throw"The type "+e+" doesn't exist";var s=new i.Column({name:t,type:e,func:_.bind(n,this)});return this._columns.push(s),this._computedColumns.push(s),this._columnPositionByName[s.name]=this._columns.length-1,this.length>0&&this.each(function(t,e){s.compute(t,e)},this),s}throw"There is already a column by this name."},addColumn:function(t){return _.isUndefined(this.column(t.name))?(t=new i.Column(t),this._columns.push(t),this._columnPositionByName[t.name]=this._columns.length-1,t):!1},_addIdColumn:function(t){if(_.isUndefined(this.column(this.idAttribute))){var e=[];t&&t>0&&_.times(t,function(){e.push(_.uniqueId())});var i=this.addColumn({name:this.idAttribute,data:e});if("_id"===this.idAttribute&&(i.type="number"),0!==this._columnPositionByName[this.idAttribute]){var n=this._columnPositionByName[this.idAttribute];this._columns.splice(n,1),this._columns.unshift(i),this._columnPositionByName[this.idAttribute]=0,_.each(this._columnPositionByName,function(t,e){e!==this.idAttribute&&n>this._columnPositionByName[e]&&this._columnPositionByName[e]++},this)}}},add:function(t,e){e=e||{},_.isArray(t)||(t=[t]);var n=[];if(_.each(t,function(t){t[this.idAttribute]||(t[this.idAttribute]=_.uniqueId()),this._add(t,e),this.syncable&&!e.silent&&n.push({changed:t})},this),this.syncable&&!e.silent){var s=i.Events._buildEvent(n,this);this.publish("add",s),this.publish("change",s)}return this},remove:function(t,e){t=this._rowFilter(t);var n=[],s=[];if(this.each(function(e){t(e)&&(s.push(e[this.idAttribute]),n.push({old:e}))}),_.each(s,function(t){this._remove(t)},this),this.syncable&&(!e||!e.silent)){var r=i.Events._buildEvent(n,this);this.publish("remove",r),this.publish("change",r)}},_arrayUpdate:function(t){var e=[];return _.each(t,function(t){var n={old:{},changed:{}};n[this.idAttribute]=t[this.idAttribute];var s=this._rowPositionById[t[this.idAttribute]];_.each(t,function(t,e){var r=this._columns[this._columnPositionByName[e]],o=i.types[r.type];if(r.name===this.idAttribute&&r.data[s]!==t)throw"You can't update the id column";if(r===void 0)throw"column "+e+" not found!";if(!o.test(t,r))throw"Value is incorrect type";this._computedColumns[r.name]||(t=o.coerce(t,r),_.isUndefined(r.before)||(t=r.before(t)),r.data[s]!==t&&(n.old[e]=r.data[s],r.data[s]=t,n.changed[e]=t))},this),this._computedColumns!==void 0&&_.each(this._computedColumns,function(t){var e=_.extend({},this._row(s)),i=e[t.name],r=t.compute(e,s);i!==r&&(n.old[t.name]=i,t.data[s]=r,n.changed[t.name]=r)},this),_.keys(n.changed).length>0&&e.push(n)},this),e},_functionUpdate:function(t){for(var e=[],i=0;this.length>i;i++){var n=t(this.rowByPosition(i));n!==!1&&e.push(n)}return this._arrayUpdate(e)},update:function(t,e){var n;if(_.isFunction(t))n=this._functionUpdate(t);else{var s=_.isArray(t)?t:[t];n=this._arrayUpdate(s)}if(this.syncable&&(!e||!e.silent)){var r=i.Events._buildEvent(n,this);this.publish("update",r),this.publish("change",r)}return this},reset:function(t){_.each(this._columns,function(t){t.data=[]}),this.length=0,!this.syncable||t&&t.silent||this.publish("reset")}})}(this,_,moment),function(t,_){var e=t.Miso.Dataset;e.typeOf=function(t,i){var n,s=_.keys(e.types);return s.push(s.splice(_.indexOf(s,"string"),1)[0]),s.push(s.splice(_.indexOf(s,"mixed"),1)[0]),n=_.find(s,function(n){return e.types[n].test(t,i)}),n=_.isUndefined(n)?"string":n},e.types={mixed:{name:"mixed",coerce:function(t){return _.isNull(t)||t===void 0||_.isNaN(t)?null:t},test:function(){return!0},compare:function(t,e){return _.isEqual(t,e)?0:e>t?-1:t>e?1:void 0},numeric:function(t){return null===t||_.isNaN(+t)?null:+t}},string:{name:"string",coerce:function(t){return _.isNaN(t)||null===t||t===void 0?null:""+t},test:function(t){return null===t||t===void 0||"string"==typeof t},compare:function(t,e){return null==t&&null!=e?-1:null!=t&&null==e?1:e>t?-1:t>e?1:0},numeric:function(t){return _.isNaN(+t)||null===t?null:_.isNumber(+t)?+t:null}},"boolean":{name:"boolean",regexp:/^(true|false)$/,coerce:function(t){return _.isNaN(t)||null===t||t===void 0?null:"false"===t?!1:Boolean(t)},test:function(t){return null===t||t===void 0||"boolean"==typeof t||this.regexp.test(t)?!0:!1},compare:function(t,e){return null==t&&null!=e?-1:null!=t&&null==e?1:null==t&&null==e?0:t===e?0:e>t?-1:1},numeric:function(t){return null===t||_.isNaN(t)?null:t?1:0}},number:{name:"number",regexp:/^\s*[\-\.]?[0-9]+([\.][0-9]+)?\s*$/,coerce:function(t){var e=+t;return _.isNull(t)||t===void 0||_.isNaN(e)?null:e},test:function(t){return null===t||t===void 0||"number"==typeof t||this.regexp.test(t)?!0:!1},compare:function(t,e){return null==t&&null!=e?-1:null!=t&&null==e?1:null==t&&null==e?0:t===e?0:e>t?-1:1},numeric:function(t){return _.isNaN(t)||null===t?null:t}},time:{name:"time",format:"DD/MM/YYYY",_formatLookup:[["DD","\\d{2}"],["D","\\d{1}|\\d{2}"],["MM","\\d{2}"],["M","\\d{1}|\\d{2}"],["YYYY","\\d{4}"],["YY","\\d{2}"],["A","[AM|PM]"],["hh","\\d{2}"],["h","\\d{1}|\\d{2}"],["mm","\\d{2}"],["m","\\d{1}|\\d{2}"],["ss","\\d{2}"],["s","\\d{1}|\\d{2}"],["ZZ","[-|+]\\d{4}"],["Z","[-|+]\\d{2}:\\d{2}"]],_regexpTable:{},_regexp:function(t){if(this._regexpTable[t])return RegExp(this._regexpTable[t],"g");var e=t;return _.each(this._formatLookup,function(t){e=e.replace(t[0],t[1])},this),e=e.split("/").join("\\/"),this._regexpTable[t]=e,RegExp(this._regexpTable[t],"g")},coerce:function(t,e){if(e=e||{},_.isNull(t)||t===void 0||_.isNaN(t))return null;if(_.isString(t)){var i=e.format||this.format;return moment(t,i)}return _.isNumber(t)?moment(t):t},test:function(t,e){if(e=e||{},null===t||t===void 0)return!0;if(_.isString(t)){var i=e.format||this.format,n=this._regexp(i);return n.test(t)}return!0},compare:function(t,e){return e>t?-1:t>e?1:0},numeric:function(t){return _.isNaN(t)||null===t?null:t.valueOf()}}}}(this,_),function(t,_){var e=t.Miso.Dataset;e.Event=function(t,e){_.isArray(t)||(t=[t]),this.deltas=t,this.dataset=e||null},_.extend(e.Event.prototype,{affectedColumns:function(){var t=[];return _.each(this.deltas,function(e){e.old=e.old||[],e.changed=e.changed||[],t=_.chain(t).union(_.keys(e.old),_.keys(e.changed)).reject(function(t){return t===this.dataset.idAttribute},this).value()},this),t}}),_.extend(e.Event,{isRemove:function(t){return _.isUndefined(t.changed)||0===_.keys(t.changed).length?!0:!1},isAdd:function(t){return _.isUndefined(t.old)||0===_.keys(t.old).length?!0:!1},isUpdate:function(t){return this.isRemove(t)||this.isAdd(t)?!1:!0}}),e.Events={},e.Events._buildEvent=function(t,i){return new e.Event(t,i)}}(this,_),function(t,_){var e=t.Miso.Dataset;e.Builder={detectColumnType:function(t,i){var n=_.inject(i.slice(0,5),function(t,i){var n=e.typeOf(i);return""===i||-1!==t.indexOf(n)||_.isNull(i)||t.push(n),t},[]);return t.type=1===n.length?n[0]:"mixed",t},detectColumnTypes:function(t,i){_.each(i,function(i,n){var s=t.column(n);return s.type?(s.force=!0,void 0):(e.Builder.detectColumnType(s,i),void 0)},this)},cacheRows:function(t){e.Builder.clearRowCache(t),_.each(t._columns[t._columnPositionByName[t.idAttribute]].data,function(e,i){t._rowPositionById[e]=i,t._rowIdByPosition.push(e)},t);var i=_.uniq(_.map(t._columns,function(t){return t.data.length}));if(i.length>1)throw Error("Row lengths need to be the same. Empty values should be set to null."+_.map(t._columns,function(t){return t.data+"|||"}));t.length=i[0]},clearRowCache:function(t){t._rowPositionById={},t._rowIdByPosition=[]},cacheColumns:function(t){t._columnPositionByName={},_.each(t._columns,function(e,i){t._columnPositionByName[e.name]=i})}},Array.prototype.indexOf||(Array.prototype.indexOf=function(t,e){for(var i=e||0,n=this.length;n>i;i++)if(this[i]===t)return i;return-1})}(this,_),function(t,_){var e=t.Miso||(t.Miso={}),i=t.Miso.Dataset;i.Product=function(t){if(t=t||{},this.func=t.func,t.columns){var e=t.columns;_.isArray(t.columns)&&(e=t.columns[0]),this.valuetype=e.type,this.numeric=function(){return e.toNumeric(this.value)}}return this.func({silent:!0}),this},_.extend(i.Product.prototype,e.Events,{val:function(){return this.value},type:function(){return this.valuetype},_sync:function(){this.func()},_buildDelta:function(t,e){return{old:t,changed:e}}}),i.Product.define=function(t){return function(e,n){n=n||{};var s=this._findColumns(e),r=this;n.type=n.type||s[0].type,n.typeOptions=n.typeOptions||s[0].typeOptions;var o=function(){var e=t.call(r,s,n);return i.types[n.type].coerce(e,n.typeOptions)};if(this.syncable){var a=new i.Product({columns:s,func:function(t){t=t||{};var e=this._buildDelta(this.value,o.call(r));if(this.value=e.changed,r.syncable){var n=i.Events._buildEvent(e,this);_.isUndefined(e.old)||t.silent||e.old===e.changed||this.publish("change",n)}}});return this.subscribe("change",a._sync,{context:a}),a}return o.call(r)}},_.extend(i.DataView.prototype,{_findColumns:function(t){var e=[];return _.isUndefined(t)&&(t=this.columnNames()),t=_.isArray(t)?t:[t],_.each(t,function(t){t=this._columns[this._columnPositionByName[t]],e.push(t)},this),e},sum:i.Product.define(function(t){return _.each(t,function(t){if(t.type===i.types.time.name)throw Error("Can't sum up time")}),_.sum(_.map(t,function(t){return t._sum()}))}),max:i.Product.define(function(t){return _.max(_.map(t,function(t){return t._max()}))}),min:i.Product.define(function(t){return _.min(_.map(t,function(t){return t._min()}))}),mean:i.Product.define(function(t){var e=[];_.each(t,function(t){e.push(t.data)}),e=_.flatten(e);var n=t[0].type;return e=_.map(e,function(t){return i.types[n].numeric(t)}),_.mean(e)})})}(this,_),function(t,_){var e=t.Miso.Dataset;e.Importers=function(){},e.Importers.prototype.extract=function(t){return t=_.clone(t)}}(this,_),function(t,_){var e=t.Miso.Dataset;e.Importers.Local=function(t){t=t||{},this.data=t.data||null,this.extract=t.extract||this.extract},_.extend(e.Importers.Local.prototype,e.Importers.prototype,{fetch:function(t){var e=t.data?t.data:this.data;t.success(this.extract(e))}})}(this,_),function(t,_){var e=t.Miso.Dataset;e.Importers.Remote=function(t){t=t||{},this._url=t.url,this.extract=t.extract||this.extract,this.params={type:"GET",url:_.isFunction(this._url)?_.bind(this._url,this):this._url,dataType:t.dataType?t.dataType:t.jsonp?"jsonp":"json",callback:t.callback,headers:t.headers}},_.extend(e.Importers.Remote.prototype,e.Importers.prototype,{fetch:function(t){var i=_.bind(function(e){t.success(this.extract(e))},this);this.callback&&(window[this.callback]=i),e.Xhr(_.extend(this.params,{success:this.callback?this.callback:i,error:t.error}))}});var i={url:"",data:"",dataType:"",success:function(){},type:"GET",async:!0,headers:{},xhr:function(){return t.ActiveXObject?new t.ActiveXObject("Microsoft.XMLHTTP"):new t.XMLHttpRequest}},n=/\?/;e.Xhr=function(t){t.dataType=t.dataType&&t.dataType.toLowerCase()||null;var s=_.isFunction(t.url)?t.url():t.url;if(t.dataType&&("jsonp"===t.dataType||"script"===t.dataType))return e.Xhr.getJSONP(s,t.success,"script"===t.dataType,t.error,t.callback),void 0;var r=_.extend({},i,t,{url:s});return r.ajax=r.xhr(),r.ajax?("GET"===r.type&&r.data&&(r.url+=(n.test(r.url)?"&":"?")+r.data,r.data=null),r.ajax.open(r.type,r.url,r.async),t.headers&&_(t.headers).forEach(function(t,e){r.ajax.setRequestHeader(e,t)}),r.ajax.send(r.data||null),e.Xhr.httpData(r)):void 0},e.Xhr.getJSONP=function(t,e,i,n,s){if(i){var r=document.querySelectorAll('script[src="'+t+'"]');if(r.length)return e&&e(!0),void 0}var o,a=document.head||document.getElementsByTagName("head")[0]||document.documentElement,u=document.createElement("script"),h=t.split("?")[1],c=!1,l=[];if(h&&!i&&(l=h.split("&")),l.length&&(o=l[l.length-1].split("=")),!s){var d=_.uniqueId("callback");s=l.length?o[1]?o[1]:d:d}h||i||(t+="?"),h&&/callback/.test(h)||(h&&(t+="&"),t+="callback="+s),s&&!i&&(window[s]&&(s=s+ +new Date+_.uniqueId()),window[s]=function(t){e&&e(t),c=!0},o&&(t=t.replace(o.join("="),o[0]+"="+s))),u.onload=u.onreadystatechange=function(){if((!u.readyState||/loaded|complete/.test(u.readyState))&&(i&&e&&e(),c)){try{delete window[s]}catch(t){window[s]=void 0}a.removeChild(u)}},u.onerror=function(t){n&&n.call(null,t)},u.src=t,a.insertBefore(u,a.firstChild)},e.Xhr.httpData=function(t){var e,i,n=null;return i=function(){if(4===t.ajax.readyState){try{n=JSON.parse(t.ajax.responseText)}catch(i){}e={xml:t.ajax.responseXML,text:t.ajax.responseText,json:n},t.dataType&&(e=e[t.dataType]),/(2..)/.test(t.ajax.status)?t.success.call(t.ajax,e):t.error&&t.error.call(null,t.ajax.statusText)}},4===t.ajax.readyState?i():t.ajax.onreadystatechange=i,e}}(this,_),function(t,_){var e=t.Miso.Dataset;e.Importers.Polling=function(t){t=t||{},this.interval=t.interval||1e3,this._def=null,e.Importers.Remote.apply(this,[t])},_.extend(e.Importers.Polling.prototype,e.Importers.Remote.prototype,{fetch:function(i){null===this._def&&(this._def=_.Deferred(),this.success_callback=_.bind(function(t){i.success(this.extract(t)),this._def.resolve(this)},this),this.error_callback=_.bind(function(t){i.error(t),this._def.reject(t)},this)),_.when(this._def.promise()).then(function(t){var e=_.bind(function(){this.fetch({success:this.success_callback,error:this.error_callback})},t);t._timeout=setTimeout(e,t.interval),t._def=_.Deferred()}),e.Xhr(_.extend(this.params,{success:this.success_callback,error:this.error_callback})),t.imp=this},stop:function(){null!==this._def&&this._def.reject(),this._timeout!==void 0&&clearTimeout(this._timeout)},start:function(){null!==this._def&&(this._def=_.Deferred(),this.fetch())}})}(this,_),function(t,_){var e=t.Miso.Dataset;e.Importers.GoogleSpreadsheet=function(t){if(t=t||{},t.url)t.url=t.url;else{if(_.isUndefined(t.key))throw Error("Set options 'key' properties to point to your google document.");t.fast?(t.url="https://spreadsheets.google.com/tq?key="+t.key,t.sheetName===void 0&&(t.sheetName="Sheet1"),t.url+="&sheet="+t.sheetName,this.callback="misodsgs"+(new Date).getTime(),t.url+="&tqx=version:0.6;responseHandler:"+this.callback,t.url+=";reqId:0;out:json&tq&_=1335871249558#",delete t.sheetName):t.url="https://spreadsheets.google.com/feeds/cells/"+t.key+"/"+t.worksheet+"/public/basic?alt=json-in-script&callback=",delete t.key}return this.params={type:"GET",url:t.url,dataType:"jsonp"},this},_.extend(e.Importers.GoogleSpreadsheet.prototype,e.Importers.Remote.prototype)}(this,_),function(t,_){var e=t.Miso.Dataset;e.Parsers=function(t){this.options=t||{}},_.extend(e.Parsers.prototype,{parse:function(){}})}(this,_),function(t,_){var e=t.Miso.Dataset;e.Parsers.Strict=function(t){this.options=t||{}},_.extend(e.Parsers.Strict.prototype,e.Parsers.prototype,{parse:function(t){var e={},i=[];return _.each(t.columns,function(t){if(-1!==i.indexOf(t.name))throw Error('You have more than one column named "'+t.name+'"');i.push(t.name),e[t.name]=t.data}),{columns:i,data:e}}})}(this,_),function(t,_){var e=t.Miso.Dataset;e.Parsers.Obj=e.Parsers,_.extend(e.Parsers.Obj.prototype,e.Parsers.prototype,{parse:function(t){var e=_.keys(t[0]),i={};return _.each(e,function(t){i[t]=[]}),_.each(e,function(e){_.times(t.length,function(n){i[e].push(t[n][e])})}),{columns:e,data:i}}})}(this,_),function(t,_){var e=t.Miso.Dataset;e.Parsers.GoogleSpreadsheet=function(t){this.fast=t.fast||!1},_.extend(e.Parsers.GoogleSpreadsheet.prototype,e.Parsers.prototype,{parse:function(t){var e,i=[],n=[],s={};if(t.status!==void 0&&"error"===t.status)throw Error("You can't use the fast importer for this url. Disable the fast flag");if(this.fast){if(i=_.pluck(t.table.cols,"label"),_.unique(i).length1&&(r=e),t},{}),Error('You have more than one column named "'+r+'"')}_.each(t.table.rows,function(t){for(t=t.c,e=0;t.length>e;e++)n[e]=n[e]||[],""===t[e].v?n[e].push(null):n[e].push(t[e].v)}),_.each(i,function(t,e){s[t]=n[e]})}else{var o=/([A-Z]+)(\d+)/,a={};_.each(t.feed.entry,function(t){var e=o.exec(t.title.$t),s=e[1],r=parseInt(e[2],10);if(1===r){if(-1!==i.indexOf(t.content.$t))throw Error('You have more than one column named "'+t.content.$t+'"');a[s]=n.length,i[a[s]]=t.content.$t,n[a[s]]=[]}else{var u=a[s];n[u][r-1]=t.content.$t}},this),_.each(n,function(t,e){t.length=_.max(_.pluck(n,"length")),t.splice(0,1);for(var r=0;t.length>r;r++)(_.isUndefined(t[r])||""===t[r])&&(t[r]=null);s[i[e]]=t})}return{columns:i,data:s}}})}(this,_),function(t,_){var e=t.Miso.Dataset;e.Parsers.Delimited=function(t){t=t||{},this.delimiter=t.delimiter||",",this.skipRows=t.skipRows||0,this.emptyValue=t.emptyValue||null,this.__delimiterPatterns=RegExp("(\\"+this.delimiter+"|\\r?\\n|\\r|^)"+'(?:"([^"]*(?:""[^"]*)*)"|'+'([^"\\'+this.delimiter+"\\r\\n]*))","gi")},"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),_.extend(e.Parsers.Delimited.prototype,e.Parsers.prototype,{parse:function(t){var e=[],i={},n={},s=function(t){n[t]||(n[t]=0);var e=t+n[t];return n[t]+=1,e},r=function(t,n,r,o,a){function u(t){var n=t[1];if(n.length&&n!==r){if(p++,c-1>d)throw p--,Error("Not enough items in row");l=!0,d=0}else l||c++,d++;var o=null;if(o=t[2]?t[2].replace(RegExp('""',"g"),'"'):t[3],l){if(""===o&&(o=a),i[e[d]]===void 0)throw Error("Too many items in row");i[e[d]].push(o)}else{var u=function(t){for(var i=s(t);-1!==e.indexOf(i);)i=s(t);return i};(_.isUndefined(o)||""===o)&&(o="X"),-1!==e.indexOf(o)&&(o=u(o)),e.push(o),i[o]=[]}}r=r||",";var h=null,c=0,l=!1,d=-1,p=0;try{if(n=n.replace(/\s+$/,"").replace(/^[\r|\n|\s]+[\r|\n]/,"\n"),o>0){for(var f=0,m=0,y=n.length;o>f&&y>m;)/\n|\r|\r\n/.test(n.charAt(m))&&f++,m++;n=n.slice(m,y)}for(RegExp("^"+r).test(n)&&u(["","",void 0,""]);h=t.exec(n);)u(h)}catch(v){throw Error("Error while parsing delimited data on row "+p+". Message: "+v.message)}return{columns:e,data:i}};return r(this.__delimiterPatterns,t,this.delimiter,this.skipRows,this.emptyValue)}})}(this,_),function(t,_){var e=t.Miso||(t.Miso={}),i=e.Dataset;i.Derived=function(t){t=t||{},i.call(this),this.parent=t.parent,this.idAttribute="_id",this.method=t.method,this._addIdColumn(),this.addColumn({name:"_oids",type:"mixed"}),this.parent.syncable&&(_.extend(this,e.Events),this.syncable=!0,this.parent.subscribe("change",this._sync,{context:this}))},i.Derived.prototype=new i,_.extend(i.Derived.prototype,{_sync:function(){this.func.call(this.args),this.publish("change")}}),_.extend(i.DataView.prototype,{movingAverage:function(t,e,n){n=n||{};var s=new i.Derived({parent:this,method:n.method||_.mean,size:e,args:arguments});this.eachColumn(function(t){if(t===this.idAttribute)throw"You can't compute a moving average on the id column";s.addColumn({name:t,type:this.column(t).type,data:[]})},this),i.Builder.cacheColumns(s);var r=function(){"string"==typeof t&&(t=[t]),this.column(this.idAttribute).data=this.parent.column(this.parent.idAttribute).data.slice(e-1,this.parent.length),this.eachColumn(function(i,n){n.data=-1===t.indexOf(i)&&"_oids"!==i?this.parent.column(i).data.slice(e-1,this.parent.length):_.movingAvg(this.parent.column(i).data,e,this.method)},this),this.length=this.parent.length-e+1;var n=this.column("_oids");n.data=[];for(var s=0;this.length>s;s++)n.data.push(this.parent.column(this.parent.idAttribute).data.slice(s,s+e));return i.Builder.cacheRows(this),this};return s.func=_.bind(r,s),s.func.call(s.args)},countBy:function(t,e){function n(t,e,n){var s;for(s=0;t.length>s;s++)if(0===i.types[n].compare(t[s],e))return s;return-1}e=e||{};var s=new i.Derived({parent:this,method:_.sum,args:arguments}),r=this.column(t);s.addColumn({name:t,type:r.type}),s.addColumn({name:"count",type:"number"}),s.addColumn({name:"_oids",type:"mixed"}),i.Builder.cacheColumns(s);var o=s.column(t).data,a=s.column("count").data,u=s.column("_oids").data,h=s.column(s.idAttribute).data;return this.each(function(e){var i=n(o,e[t],r.type);-1===i?(o.push(e[t]),h.push(_.uniqueId()),a.push(1),u.push([e[this.parent.idAttribute]])):(a[i]+=1,u[i].push(e[this.parent.idAttribute]))},s),i.Builder.cacheRows(s),s},groupBy:function(t,e,n){n=n||{};var s=new i.Derived({parent:this,method:n.method||_.sum,args:arguments});n&&n.preprocess&&(s.preprocess=n.preprocess);var r=_.union([t],e);_.each(r,function(t){this.addColumn({name:t,type:this.parent.column(t).type})},s),i.Builder.cacheColumns(s);var o=function(){var n=this;i.Builder.clearRowCache(this);for(var s={},r=0,o=this.parent.column(t),a=0;this.parent.length>a;a++){var u=null;u=this.preprocess?this.preprocess(o.data[a]):o.data[a],_.isUndefined(s[u])&&(s[u]=r,_.each(e,function(t){var e=this.column(t),i=this.column(this.idAttribute);e.data[r]=[],i.data[r]=_.uniqueId()},this),this.column(t).data[r]=u,r++),_.each(e,function(t){var e=this.column(t),i=s[u];e.data[i].push(this.parent.rowByPosition(a))},this)}var h=this._columns[this._columnPositionByName._oids];return h.data=[],_.each(e,function(t){var e=this.column(t);_.each(e.data,function(i,s){_.isArray(i)&&(h.data[s]=h.data[s]||[],h.data[s].push(_.map(i,function(t){return t[n.parent.idAttribute]})),h.data[s]=_.flatten(h.data[s]),e.data[s]=this.method(_.map(i,function(e){return e[t]})),this.length++)},this)},this),i.Builder.cacheRows(this),this};return s.func=_.bind(o,s),s.func.call(s.args)}})}(this,_);