AjaxSolr=function(){};AjaxSolr.Class=function(){};AjaxSolr.Class.extend=function(properties){var klass=this;var subClass=function(options){AjaxSolr.extend(this,new klass(options),properties,options);}
subClass.extend=this.extend;return subClass;};AjaxSolr.size=function(obj){var size=0;for(var key in obj){if(obj.hasOwnProperty(key)){size++;}}
return size;};AjaxSolr.equals=function(foo,bar){if(AjaxSolr.isArray(foo)&&AjaxSolr.isArray(bar)){if(foo.length!==bar.length){return false;}
for(var i=0,l=foo.length;i<l;i++){if(foo[i]!==bar[i]){return false;}}
return true;}
else if(AjaxSolr.isRegExp(foo)&&AjaxSolr.isString(bar)){return bar.match(foo);}
else if(AjaxSolr.isRegExp(bar)&&AjaxSolr.isString(foo)){return foo.match(bar);}
else{return foo===bar;}};AjaxSolr.inArray=function(value,array){if(array){for(var i=0,l=array.length;i<l;i++){if(AjaxSolr.equals(array[i],value)){return i;}}}
return-1;};AjaxSolr.flatten=function(array){var ret=[];for(var i=0,l=array.length;i<l;i++){ret=ret.concat(AjaxSolr.isArray(array[i])?AjaxSolr.flatten(array[i]):array[i]);}
return ret;};AjaxSolr.grep=function(array,callback){var ret=[];for(var i=0,l=array.length;i<l;i++){if(!callback(array[i],i)===false){ret.push(array[i]);}}
return ret;}
AjaxSolr.compact=function(array){return AjaxSolr.grep(array,function(item){return item.toString();});}
AjaxSolr.isArray=function(obj){return obj!=null&&typeof obj=='object'&&'splice'in obj&&'join'in obj;};AjaxSolr.isRegExp=function(obj){return obj!=null&&(typeof obj=='object'||typeof obj=='function')&&'ignoreCase'in obj;};AjaxSolr.isString=function(obj){return obj!=null&&typeof obj=='string';};AjaxSolr.theme=function(func){for(var i=1,args=[];i<arguments.length;i++){args.push(arguments[i]);}
try{return(AjaxSolr.theme[func]||AjaxSolr.theme.prototype[func]).apply(this,args);}
catch(e){if(console&&console.log){console.log('Theme function "'+func+'" is not defined.');}
throw e;}};AjaxSolr.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,options;for(;i<length;i++){if((options=arguments[i])!=null){for(var name in options){var src=target[name],copy=options[name];if(target===copy){continue;}
if(copy&&typeof copy=='object'&&!copy.nodeType){target[name]=AjaxSolr.extend(src||(copy.length!=null?[]:{}),copy);}
else if(copy!==undefined){target[name]=copy;}}}}
return target;};AjaxSolr.AbstractManager=AjaxSolr.Class.extend({solrUrl:'http://localhost:8983/solr/',proxyUrl:null,servlet:'select',response:{},widgets:{},store:null,initialized:false,init:function(){this.initialized=true;if(this.store===null){this.setStore(new AjaxSolr.ParameterStore());}
this.store.load(false);for(var widgetId in this.widgets){this.widgets[widgetId].init();}
this.store.init();},setStore:function(store){store.manager=this;this.store=store;},addWidget:function(widget){widget.manager=this;this.widgets[widget.id]=widget;},doRequest:function(start,servlet){if(this.initialized===false){this.init();}
if(start!==undefined){this.store.get('start').val(start);}
if(servlet===undefined){servlet=this.servlet;}
this.store.save();for(var widgetId in this.widgets){this.widgets[widgetId].beforeRequest();}
this.executeRequest(servlet);},executeRequest:function(servlet){throw'Abstract method executeRequest must be overridden in a subclass.';},handleResponse:function(data){this.response=data;for(var widgetId in this.widgets){this.widgets[widgetId].afterRequest();}}});AjaxSolr.Manager=AjaxSolr.AbstractManager.extend({executeRequest:function(servlet){var self=this;if(this.proxyUrl){jQuery.post(this.proxyUrl,{query:this.store.string()},function(data){self.handleResponse(data);},'json');}
else{jQuery.getJSON(this.solrUrl+'/(offset)/'+this.store.get('start').val()+'?'+this.store.string()+'&jsoncallback=?',{},function(data){self.handleResponse(data);});}}});AjaxSolr.Parameter=AjaxSolr.Class.extend({name:null,value:null,locals:{},val:function(value){if(value===undefined){return this.value;}
else{this.value=value;}},local:function(name,value){if(value===undefined){return this.locals[name];}
else{this.locals[name]=value;}},remove:function(name){delete this.locals[name];},string:function(){var pairs=[];for(var name in this.locals){if(this.locals[name]){pairs.push(name+'='+encodeURIComponent(this.locals[name]));}}
var prefix=pairs.length?'{!'+pairs.join('%20')+'}':'';if(this.value){return this.name+'='+prefix+this.valueString(this.value);}
else if(this.name=='q'){return'q.alt='+prefix+encodeURIComponent('*.*');}
else{return'';}},parseString:function(str){var param=str.match(/^([^=]+)=(?:\{!([^\}]*)\})?(.*)$/);if(param){var matches;while(matches=/([^\s=]+)=(\S*)/g.exec(decodeURIComponent(param[2]))){this.locals[matches[1]]=decodeURIComponent(matches[2]);param[2]=param[2].replace(matches[0],'');}
if(param[1]=='q.alt'){this.name='q';}
else{this.name=param[1];this.value=this.parseValueString(param[3]);}}},valueString:function(value){value=AjaxSolr.isArray(value)?value.join(','):value;return encodeURIComponent(value);},parseValueString:function(str){str=decodeURIComponent(str);return str.indexOf(',')==-1?str:str.split(',');}});AjaxSolr.ParameterStore=AjaxSolr.Class.extend({exposed:[],params:{},manager:null,init:function(){},isMultiple:function(name){return name.match(/^(?:bf|bq|facet\.date|facet\.date\.other|facet\.field|facet\.query|fq|pf|qf)$/);},get:function(name){if(this.params[name]===undefined){var param=new AjaxSolr.Parameter({name:name});if(this.isMultiple(name)){this.params[name]=[param];}
else{this.params[name]=param;}}
return this.params[name];},values:function(name){if(this.params[name]!==undefined){if(this.isMultiple(name)){var values=[];for(var i=0,l=this.params[name].length;i<l;i++){values.push(this.params[name][i].val());}
return values;}
else{return[this.params[name].val()];}}
return[];},add:function(name,param){if(param===undefined){param=new AjaxSolr.Parameter({name:name});}
if(this.isMultiple(name)){if(this.params[name]===undefined){this.params[name]=[param];}
else{if(AjaxSolr.inArray(param.val(),this.values(name))==-1){this.params[name].push(param);}
else{return false;}}}
else{this.params[name]=param;}
return param;},remove:function(name,index){if(index===undefined){delete this.params[name];}
else{this.params[name].splice(index,1);if(this.params[name].length==0){delete this.params[name];}}},find:function(name,value){if(this.params[name]!==undefined){if(this.isMultiple(name)){var indices=[];for(var i=0,l=this.params[name].length;i<l;i++){if(AjaxSolr.equals(this.params[name][i].val(),value)){indices.push(i);}}
return indices.length?indices:false;}
else{if(AjaxSolr.equals(this.params[name].val(),value)){return name;}}}
return false;},addByValue:function(name,value){if(this.isMultiple(name)&&AjaxSolr.isArray(value)){var ret=[];for(var i=0,l=value.length;i<l;i++){ret.push(this.add(name,new AjaxSolr.Parameter({name:name,value:value[i]})));}
return ret;}
else{return this.add(name,new AjaxSolr.Parameter({name:name,value:value}))}},removeByValue:function(name,value){var indices=this.find(name,value);if(indices){if(AjaxSolr.isArray(indices)){for(var i=indices.length-1;i>=0;i--){this.remove(name,indices[i]);}}
else{this.remove(indices);}}
return indices;},string:function(){var params=[];for(var name in this.params){if(this.isMultiple(name)){for(var i=0,l=this.params[name].length;i<l;i++){params.push(this.params[name][i].string());}}
else{params.push(this.params[name].string());}}
return AjaxSolr.compact(params).join('&');},parseString:function(str){var pairs=str.split('&');for(var i=0,l=pairs.length;i<l;i++){if(pairs[i]){var param=new AjaxSolr.Parameter();param.parseString(pairs[i]);this.add(param.name,param);}}},exposedString:function(){var params=[];for(var i=0,l=this.exposed.length;i<l;i++){if(this.params[this.exposed[i]]!==undefined){if(this.isMultiple(this.exposed[i])){for(var j=0,m=this.params[this.exposed[i]].length;j<m;j++){params.push(this.params[this.exposed[i]][j].string());}}
else{params.push(this.params[this.exposed[i]].string());}}}
return AjaxSolr.compact(params).join('&');},exposedReset:function(){for(var i=0,l=this.exposed.length;i<l;i++){this.remove(this.exposed[i]);}},load:function(reset){if(reset===undefined){reset=true;}
if(reset){this.exposedReset();}
this.parseString(this.storedString());},save:function(){},storedString:function(){return'';}});AjaxSolr.AbstractManager=AjaxSolr.Class.extend({solrUrl:'http://localhost:8983/solr/',proxyUrl:null,servlet:'select',response:{},widgets:{},store:null,initialized:false,init:function(){this.initialized=true;if(this.store===null){this.setStore(new AjaxSolr.ParameterStore());}
this.store.load(false);for(var widgetId in this.widgets){this.widgets[widgetId].init();}
this.store.init();},setStore:function(store){store.manager=this;this.store=store;},addWidget:function(widget){widget.manager=this;this.widgets[widget.id]=widget;},doRequest:function(start,servlet){if(this.initialized===false){this.init();}
if(start!==undefined){this.store.get('start').val(start);}
if(servlet===undefined){servlet=this.servlet;}
this.store.save();for(var widgetId in this.widgets){this.widgets[widgetId].beforeRequest();}
this.executeRequest(servlet);},executeRequest:function(servlet){throw'Abstract method executeRequest must be overridden in a subclass.';},handleResponse:function(data){this.response=data;for(var widgetId in this.widgets){this.widgets[widgetId].afterRequest();}}});AjaxSolr=function(){};AjaxSolr.Class=function(){};AjaxSolr.Class.extend=function(properties){var klass=this;var subClass=function(options){AjaxSolr.extend(this,new klass(options),properties,options);}
subClass.extend=this.extend;return subClass;};AjaxSolr.size=function(obj){var size=0;for(var key in obj){if(obj.hasOwnProperty(key)){size++;}}
return size;};AjaxSolr.equals=function(foo,bar){if(AjaxSolr.isArray(foo)&&AjaxSolr.isArray(bar)){if(foo.length!==bar.length){return false;}
for(var i=0,l=foo.length;i<l;i++){if(foo[i]!==bar[i]){return false;}}
return true;}
else if(AjaxSolr.isRegExp(foo)&&AjaxSolr.isString(bar)){return bar.match(foo);}
else if(AjaxSolr.isRegExp(bar)&&AjaxSolr.isString(foo)){return foo.match(bar);}
else{return foo===bar;}};AjaxSolr.inArray=function(value,array){if(array){for(var i=0,l=array.length;i<l;i++){if(AjaxSolr.equals(array[i],value)){return i;}}}
return-1;};AjaxSolr.flatten=function(array){var ret=[];for(var i=0,l=array.length;i<l;i++){ret=ret.concat(AjaxSolr.isArray(array[i])?AjaxSolr.flatten(array[i]):array[i]);}
return ret;};AjaxSolr.grep=function(array,callback){var ret=[];for(var i=0,l=array.length;i<l;i++){if(!callback(array[i],i)===false){ret.push(array[i]);}}
return ret;}
AjaxSolr.compact=function(array){return AjaxSolr.grep(array,function(item){return item.toString();});}
AjaxSolr.isArray=function(obj){return obj!=null&&typeof obj=='object'&&'splice'in obj&&'join'in obj;};AjaxSolr.isRegExp=function(obj){return obj!=null&&(typeof obj=='object'||typeof obj=='function')&&'ignoreCase'in obj;};AjaxSolr.isString=function(obj){return obj!=null&&typeof obj=='string';};AjaxSolr.theme=function(func){for(var i=1,args=[];i<arguments.length;i++){args.push(arguments[i]);}
try{return(AjaxSolr.theme[func]||AjaxSolr.theme.prototype[func]).apply(this,args);}
catch(e){if(console&&console.log){console.log('Theme function "'+func+'" is not defined.');}
throw e;}};AjaxSolr.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,options;for(;i<length;i++){if((options=arguments[i])!=null){for(var name in options){var src=target[name],copy=options[name];if(target===copy){continue;}
if(copy&&typeof copy=='object'&&!copy.nodeType){target[name]=AjaxSolr.extend(src||(copy.length!=null?[]:{}),copy);}
else if(copy!==undefined){target[name]=copy;}}}}
return target;};AjaxSolr.AbstractManager=AjaxSolr.Class.extend({solrUrl:'http://localhost:8983/solr/',proxyUrl:null,servlet:'select',response:{},widgets:{},store:null,initialized:false,init:function(){this.initialized=true;if(this.store===null){this.setStore(new AjaxSolr.ParameterStore());}
this.store.load(false);for(var widgetId in this.widgets){this.widgets[widgetId].init();}
this.store.init();},setStore:function(store){store.manager=this;this.store=store;},addWidget:function(widget){widget.manager=this;this.widgets[widget.id]=widget;},doRequest:function(start,servlet){if(this.initialized===false){this.init();}
if(start!==undefined){this.store.get('start').val(start);}
if(servlet===undefined){servlet=this.servlet;}
this.store.save();for(var widgetId in this.widgets){this.widgets[widgetId].beforeRequest();}
this.executeRequest(servlet);},executeRequest:function(servlet){throw'Abstract method executeRequest must be overridden in a subclass.';},handleResponse:function(data){this.response=data;for(var widgetId in this.widgets){this.widgets[widgetId].afterRequest();}}});AjaxSolr.AbstractWidget=AjaxSolr.Class.extend({id:null,target:null,manager:null,init:function(){},beforeRequest:function(){},afterRequest:function(){}});AjaxSolr.Parameter=AjaxSolr.Class.extend({name:null,value:null,locals:{},val:function(value){if(value===undefined){return this.value;}
else{this.value=value;}},local:function(name,value){if(value===undefined){return this.locals[name];}
else{this.locals[name]=value;}},remove:function(name){delete this.locals[name];},string:function(){var pairs=[];for(var name in this.locals){if(this.locals[name]){pairs.push(name+'='+encodeURIComponent(this.locals[name]));}}
var prefix=pairs.length?'{!'+pairs.join('%20')+'}':'';if(this.value){return this.name+'='+prefix+this.valueString(this.value);}
else if(this.name=='q'){return'q.alt='+prefix+encodeURIComponent('*.*');}
else{return'';}},parseString:function(str){var param=str.match(/^([^=]+)=(?:\{!([^\}]*)\})?(.*)$/);if(param){var matches;while(matches=/([^\s=]+)=(\S*)/g.exec(decodeURIComponent(param[2]))){this.locals[matches[1]]=decodeURIComponent(matches[2]);param[2]=param[2].replace(matches[0],'');}
if(param[1]=='q.alt'){this.name='q';}
else{this.name=param[1];this.value=this.parseValueString(param[3]);}}},valueString:function(value){value=AjaxSolr.isArray(value)?value.join(','):value;return encodeURIComponent(value);},parseValueString:function(str){str=decodeURIComponent(str);return str.indexOf(',')==-1?str:str.split(',');}});AjaxSolr.ParameterStore=AjaxSolr.Class.extend({exposed:[],params:{},manager:null,init:function(){},isMultiple:function(name){return name.match(/^(?:bf|bq|facet\.date|facet\.date\.other|facet\.field|facet\.query|fq|pf|qf)$/);},get:function(name){if(this.params[name]===undefined){var param=new AjaxSolr.Parameter({name:name});if(this.isMultiple(name)){this.params[name]=[param];}
else{this.params[name]=param;}}
return this.params[name];},values:function(name){if(this.params[name]!==undefined){if(this.isMultiple(name)){var values=[];for(var i=0,l=this.params[name].length;i<l;i++){values.push(this.params[name][i].val());}
return values;}
else{return[this.params[name].val()];}}
return[];},add:function(name,param){if(param===undefined){param=new AjaxSolr.Parameter({name:name});}
if(this.isMultiple(name)){if(this.params[name]===undefined){this.params[name]=[param];}
else{if(AjaxSolr.inArray(param.val(),this.values(name))==-1){this.params[name].push(param);}
else{return false;}}}
else{this.params[name]=param;}
return param;},remove:function(name,index){if(index===undefined){delete this.params[name];}
else{this.params[name].splice(index,1);if(this.params[name].length==0){delete this.params[name];}}},find:function(name,value){if(this.params[name]!==undefined){if(this.isMultiple(name)){var indices=[];for(var i=0,l=this.params[name].length;i<l;i++){if(AjaxSolr.equals(this.params[name][i].val(),value)){indices.push(i);}}
return indices.length?indices:false;}
else{if(AjaxSolr.equals(this.params[name].val(),value)){return name;}}}
return false;},addByValue:function(name,value){if(this.isMultiple(name)&&AjaxSolr.isArray(value)){var ret=[];for(var i=0,l=value.length;i<l;i++){ret.push(this.add(name,new AjaxSolr.Parameter({name:name,value:value[i]})));}
return ret;}
else{return this.add(name,new AjaxSolr.Parameter({name:name,value:value}))}},removeByValue:function(name,value){var indices=this.find(name,value);if(indices){if(AjaxSolr.isArray(indices)){for(var i=indices.length-1;i>=0;i--){this.remove(name,indices[i]);}}
else{this.remove(indices);}}
return indices;},string:function(){var params=[];for(var name in this.params){if(this.isMultiple(name)){for(var i=0,l=this.params[name].length;i<l;i++){params.push(this.params[name][i].string());}}
else{params.push(this.params[name].string());}}
return AjaxSolr.compact(params).join('&');},parseString:function(str){var pairs=str.split('&');for(var i=0,l=pairs.length;i<l;i++){if(pairs[i]){var param=new AjaxSolr.Parameter();param.parseString(pairs[i]);this.add(param.name,param);}}},exposedString:function(){var params=[];for(var i=0,l=this.exposed.length;i<l;i++){if(this.params[this.exposed[i]]!==undefined){if(this.isMultiple(this.exposed[i])){for(var j=0,m=this.params[this.exposed[i]].length;j<m;j++){params.push(this.params[this.exposed[i]][j].string());}}
else{params.push(this.params[this.exposed[i]].string());}}}
return AjaxSolr.compact(params).join('&');},exposedReset:function(){for(var i=0,l=this.exposed.length;i<l;i++){this.remove(this.exposed[i]);}},load:function(reset){if(reset===undefined){reset=true;}
if(reset){this.exposedReset();}
this.parseString(this.storedString());},save:function(){},storedString:function(){return'';}});AjaxSolr.Manager=AjaxSolr.AbstractManager.extend({executeRequest:function(servlet){var self=this;if(this.proxyUrl){jQuery.post(this.proxyUrl,{query:this.store.string()},function(data){self.handleResponse(data);},'json');}
else{jQuery.getJSON(this.solrUrl+'/(offset)/'+this.store.get('start').val()+'?'+this.store.string()+'&jsoncallback=?',{},function(data){self.handleResponse(data);});}}});
