/*global $, Browser, Class, Element, MooTools, PFPortal, window */
function $debug(msg){
	if(window.console && window.console.debug){window.console.debug(msg);}
}
PFPortal.modifyQueryString = function(key, value){
	var 
		replacementValue = '',
		q = window.location.search,
		re = new RegExp('[&||\\?]'+key + "=\\w+"),
		res = q.match(re);
	if (res) {
		if (value !== null) {
			if (res[0].charAt(0) === '?') {
				replacementValue = '?'+key+'='+value;
			} else {
				replacementValue = '&'+key+'='+value;
			}
		} else {
			q = q.replace(re, '');
		}
	}
	if (q.length > 0){
		q = q.replace(/^&/, '?');		
	}				
	q = q.replace(/&page=\w+/, '').replace(/\?page=\w+/, '?');
	var r = (res || !value? q.replace(re, replacementValue) : q + (q === '' ? '?' : '&')+key+'='+value);
	return r === '' ? '.' : r;  
};
PFPortal.qv = function(key){
	var 
		q = window.location.search,
		re = new RegExp(key + "=(\\w+)"),
		res = q.match(re);
	return res && res[1] !=='all' ? res[1] : null;  
};
PFPortal.LinkSelector = new Class({
	initialize : function(key, subLabels){
		this.key = key;
		this.subLabels = subLabels;
	},
	toElement : function(){
		var 
			key = this.key,
			currentValue = PFPortal.qv(key),
			defaultLabel = '';
		this.subLabels.forEach(function(el){
			var value = el.value;
			if(value == currentValue){defaultLabel = el.label;}
		});
		var 
			labelElement = new Element('li', {text:defaultLabel}),
			subElement = new Element('ul').inject(labelElement);		
		this.subLabels.forEach(function(el){
			var value = el.value;
			var label = el.label;
			if(label){
				var link = new Element('a', {href : PFPortal.modifyQueryString(key, value), text : label});
				new Element('li').grab(link).inject(subElement);			
			}
		});
		return labelElement;
	}
});

PFPortal.content = {};
PFPortal.content.installFilter = function(opts){	
	if(Browser.Engine.trident && Browser.Engine.version < 5){return;}// if this is IE6
	var 
		myopts = opts || {},
		disabledDropdowns = opts.disabledDropdowns || [],
		parent = $('pf-content-filter-controls'),		
		defaultPageSize = myopts.defaultPageSize || 10,
		pageSizes = myopts.pageSizes || [5, 10, 25, 50],
		$l = MooTools.lang.get('Filter'),
		limitList = pageSizes.map(function(val){
			return {label:$l.get(val.toString()),value:val === defaultPageSize ? null : val};
		}),	
		injectDropdown = function(name, elements){
			if(disabledDropdowns.contains(name)){return;}
			if(!elements.every(function(obj){return obj.label === undefined;})){
				parent.grab(new PFPortal.LinkSelector(name, elements), 'top');
			}
		};
	if(!parent){return;}
	injectDropdown('limit', limitList);
	injectDropdown('fields', [{label:$l.get('descriptionField'),value:null}, {label:$l.get('mainContributorField'),value:'mainContributor'}]);
	injectDropdown('role', [{label:$l.get('artist'),value:null}, {label:$l.get('composer'),value:'Composer'}]);
	injectDropdown('sort', [{label:$l.get('sortByPopularity'),value:null}, {label:$l.get('sortByReleaseDate'),value:'releaseDate'},{label:$l.get('sortByTitle'),value:'sortTitle'}]);
	injectDropdown('format', [{label:$l.get('anyFormat'),value:null}, {label:$l.get('mp3'),value:'mp3'}]);
	injectDropdown('kind', [{label:$l.get('anyKind'), value:null}, {label : $l.get('albums'),value:"MusicCollection"},
		{label:$l.get('audioBooks'),value:'CSAudioBook'},
		{label:$l.get('movies'),value:"CSMovie"},
		{label:$l.get('tracks'),value:'Track'},
		{label:$l.get('podcasts'),value:'CSPodcast'},
		{label:$l.get('podcastEpisodes'),value:'CSPodcastEpisode'},
		{label:$l.get('eBooks'),value:'CSEBook'},
		{label:$l.get('shortVideos'),value:'CSShortVideo'}
		]);	
};
