var aSearchFilterBoxTypes	=new Array();
var aSearchFilterBoxValues	=new Array();
//var aAvailableFilterBoxTypes=new Array('text','type','title','project','domain','year','sortby');
var aAvailableFilterBoxTypes=new Array('text','type','project','domain');
var sLanguage				='';
var sSearchString			='';
var aAllDatatypeIds			=new Array();
var aAllDatatypeNames		=new Array();
var aAllDomainIds			=new Array();
var aAllDomainNames			=new Array();
var aAllProjectIds			=new Array();
var aAllProjectNames		=new Array();


function addSearchFilterBoxParameter(type,value){
	aSearchFilterBoxTypes.push(type);
	aSearchFilterBoxValues.push(value);
	renderFilterBox();
}

function getNextFilterType(){
	for(var i in aAvailableFilterBoxTypes){
		if(!inArray(aAvailableFilterBoxTypes[i],aSearchFilterBoxTypes)){
			return aAvailableFilterBoxTypes[i];
		}
	}
}

function deleteSearchFilterBoxParameter(iId){
	delete aSearchFilterBoxTypes[iId];
	delete aSearchFilterBoxValues[iId];
	renderFilterBox();
}

function getText(sLabel){
	switch(sLabel){
		case 'text':
			return (sLanguage=='en')?'Text':'Tekst';
		case 'type':
			return (sLanguage=='en')?'Type':'Type';
		case 'title':
			return (sLanguage=='en')?'Title':'Titel';
		case 'project':
			return 'Project';
		case 'domain':
			return (sLanguage=='en')?'Domain':'Domein';
		case 'year':
			return (sLanguage=='en')?'Year':'Jaar';
		case 'sortby':
			return (sLanguage=='en')?'Sort by':'Sorteer op';
		case 'addFilter':
			return (sLanguage=='en')?'add a filter':'voeg een filter toe';
		case 'search':
			return (sLanguage=='en')?'search':'zoek';
		case 'clear':
			return (sLanguage=='en')?'clear filters':'wis filters';
	}
}
function renderFilterValue(sLabel,sValue){
	//	sValue can be empty
	var out			='<div class="searchFilterBoxValueWrapper">';
	switch(sLabel){
		case 'text':
			out+=renderTextField(sLabel,sValue);
		break;
		case 'type':
			out+=renderDropDown(sLabel,sValue,aAllDatatypeIds,aAllDatatypeNames);
		break;
		case 'domain':
			out+=renderDropDown(sLabel,sValue,aAllDomainIds,aAllDomainNames);
		break;
		case 'project':
			out+=renderDropDown(sLabel,sValue,aAllProjectIds,aAllProjectNames);
	}
	return out+'</div>';
}

function renderTextField(sType,sValue){
	return '<input type="text" name="filterbox_'+sType+'" id="filterbox_'+sType+'" value="'+sValue+'" class="searchFilterBoxInputField"'
			+' onkeypress="submitOnEnter(event);"/>';
}
function renderDropDown(sType,sSelected,aChoiceIds,aChoiceNames){
	var out='<select name="filterbox_'+sType+'" id="filterbox_'+sType+'" class="searchFilterBoxInputField">';
	for(var i=0;i<aChoiceIds.length;i++){
		out+='<option value="'+aChoiceIds[i]+'"'
		if(aChoiceIds[i]==sSelected){
			out+=' selected';
		}
		out+='>'+aChoiceNames[i]+'</option>';
	}
	out+='</select>';
	return out;
}

function renderFilter(iId,sType,sValue){
	return 	'<div class="searchFilterBoxSingleFilter">'+
				'<div class="searchFilterBoxLabel">'+getText(sType)+'</div>'+
				renderFilterValue(sType,sValue)+
			'</div>';
}

function renderFilterBox(){
	var filterBox		=document.getElementById("searchFilterBox");
	var addFilterButton	='<input type="button" id="searchFilterBoxFilterAdder" value="'+getText('addFilter')+'" class="searchFilterBoxButton" onclick="addSearchFilterBoxParameter();" />';
	var clearButton		='<input type="button" id="searchFilterBoxClear" value="'+getText('clear')+'" onclick="clearForm();" class="searchFilterBoxButton" />';
	var submitButton	='<input type="button" id="searchFilterBoxSubmit" value="'+getText('search')+'" onclick="setFilterBoxFormAction();oGetFilterBoxForm().submit();" class="searchFilterBoxButton" />';
	var filterHtml		='';
	var out				='';

	out					='<form method="post" id="searchFilterBoxForm" action="/'+getText('search')+'">';
	for(var f in aSearchFilterBoxTypes){
		filterHtml+=renderFilter(f,aSearchFilterBoxTypes[f],aSearchFilterBoxValues[f]);
	}
	out					+=filterHtml;
	iPresentFilters		=getRealLength(aSearchFilterBoxTypes);
	if(iPresentFilters < aAvailableFilterBoxTypes.length ){
		out				+=addFilterButton;
	}
	if(iPresentFilters>0){
		out				+=clearButton+submitButton;
	}
	out					+='</form>';
	filterBox.innerHTML	=out;
}
function clearForm(){
	var clearValue;
	for(var i in aAvailableFilterBoxTypes){
		var thisFilterType	=aAvailableFilterBoxTypes[i];
		if(thisFilterType=='text'){
			clearValue			='';
			document.getElementById('filterbox_'+thisFilterType).value='';
		}else{
			document.getElementById('filterbox_'+thisFilterType).selectedIndex='0';
		}
	}
}
function submitOnEnter(e){
	//	event should be passed as an argument, since Firefox does not allow this object as a global.
	if(e.keyCode==13){
		setFilterBoxFormAction();
		oGetFilterBoxForm().submit();
	}
}

function setFilterBoxFormAction(){
	var oTextFilter				=document.getElementById("filterbox_text");
	if(oTextFilter!=null){
		var sSearchString		=oTextFilter.value;
		var oForm				=oGetFilterBoxForm();
		var sNewFormAction		=sLanguage=='en'?'/search':'/zoek';
		sNewFormAction			+=sSearchString!=''?'/'+sSearchString:'';
		oForm.action			=sNewFormAction;
	}
}

function oGetFilterBoxForm(){
	return document.getElementById('searchFilterBoxForm');
}

function getURLParam(strParamName){
	var strReturn		="";
	var strHref			=window.location.href;
	if(strHref.indexOf("?")>-1){
		var strQueryString	=strHref.substr(strHref.indexOf("?")).toLowerCase();
		var aQueryString	=strQueryString.split("&");
		for(var iParam=0;iParam<aQueryString.length;iParam++){
			if(aQueryString[iParam].indexOf(strParamName+"=")>-1){
				var aParam = aQueryString[iParam].split("=");
				strReturn = aParam[1];
				break;
			}
		}
	}
	return strReturn;
}

function inArray(sNeedle,aHaystack){
	for(var x=0;x<=aHaystack.length;x++){
		if(aHaystack[x]==sNeedle) return true;
	}
	return false;
}
function getRealLength(array){
	var x=0;
	for(var i in array){ x++; }
	return x;
}
