function MovieDB(g){this._views=[];this._currentView=null;this._activeFilters=[];this._dataSource=null;this._colFilterTypes=[];this._targetElement=null;this._constructor=function(a){if(typeof(a)!='object'){alert('Error: incorrect argument \'options\' passed to the constructor of MovieDB class.');return false}if(!a.views||typeof(a.views)!='object'){alert('Error: incorrect option \'views\'.');return false}if(!a.dataSource){alert('Error: missing option \'dataSource\'.');return false}this._LoadViewTemplates(a.views);this._currentView=this._views[0];this._dataSource=a.dataSource;this._targetElement=(typeof(a.target)=='object')?a.target:document.getElementById(a.target)};this.ApplyFilter=function(b,c,d){if(typeof(b)!='string')alert("Error: invalid argument 'filterGroup' passed to method MovieDB::ApplyFilter.");if(typeof(c)!="number"||c<0){alert("Error: invalid argument 'filterIndex' passed to method MovieDB::ApplyFilter.")}if(this._colFilterTypes.length==0){alert("Error: Invalid method call. There are no filter groups!")}for(var i=0;i<this._colFilterTypes.length;i++){var e=this._colFilterTypes[i];if(this._colFilterTypes[i].name==b){if(!this._currentView){return}this._currentView.xsltDoc=this._colFilterTypes[i].ApplyFilter(this._currentView.xsltDoc,c);if(d){return}var f=this._activeFilters.IndexOf(function(a){return(a[0]==b&&a[1]==c)});if(f!=-1){this._activeFilters.Reverse(f,this._activeFilters.length-1)}else{this._activeFilters.push([b,c])}return}}};this.ClearFilters=function(){for(var i=0;i<this._views.length;i++){if(this._views[i].name==this._currentView.name){this._currentView=this._views[i]}}};this.setFilters=function(){var a=this.setFilters.arguments;if(a[0]instanceof Array){a=a[0]}for(var i=0;i<a.length;i++){if(a[i]&&typeof a[i]=='object'&&a[i]instanceof FilterType){this._colFilterTypes.push(a[i])}else{alert("Error: invalid argument passed to MovieDB::setFilters");return false}}};this.ChangeView=function(a){if(typeof a=='number'){if(a>=0&&a<this._views.length){this._currentView=this._views[a]}else{alert("Error: Invalid argument "+a+" passed to MovieDB::ChangeView. Out of bounds.")}}else if(typeof a=='string'){var b=null;for(var i=0;i<this._views.length;i++){if(this._views[i].name.toLowerCase()==a.toLowerCase()){b=this._views[i]}}if(b){this._currentView=b;for(i=0;i<this._activeFilters.length;i++){this.ApplyFilter(this._activeFilters[i][0],this._activeFilters[i][1],true)}}else{alert('Error: requested view \''+a+'\' does not exist.')}}else{alert("Error: Invalid argument passed to MovieDB::ChangeView.")}};this._LoadViewTemplates=function(a){for(var b in a){var c={};c.xsltDoc=XML.Load(a[b]);c.name=b;this._views.push(c)}};this.Render=function(){if(!this._currentView){return}var a=new XML.Transformer(this._currentView.xsltDoc);a.Transform(this._dataSource,this._targetElement,null)};this._constructor.apply(this,arguments)}function Filter(a,b){this.name=a;this.expression=b}function FilterType(c){this.name=c;this._filters=new Array();this.ApplyFilter=function(a,b){}}FilterType.prototype.CountFilters=function(){return this._filters.length};FilterType.prototype.getFilter=function(a){if(typeof(a)=='number'&&a>=0&&a<this._filters.length){return this._filters[a]}else{alert('Error: invalid argument passed to method FilterType::getFilter.')}};FilterType.prototype.AddFilter=function(a){if(typeof(a)!='undefined'&&a instanceof Filter){this._filters.push(a)}else{alert('Error: invalid argument passed to method FilterType::AddFilter.')}};
