// -------------------- slider ---------------------
if (self.webfxSliderCompact_included) { // functions that use the slider, use only if appropriate script is included!
 
 var recipes_slider_time = false;
 var recipes_slider_form;
 var recipes_slider_formField;
 
 function sliderValueChanged(val) {
	var sliderValues = document.getElementsByClassName('sliderValue');
	for (var i = 0; i < sliderValues.length; ++i) {
		if(sliderValues[i].innerHTML == val) {
			sliderValues[i].addClassName('active');
		} else {
			sliderValues[i].removeClassName('active');
		}
	}
 }

function sliderValueSet(val) {
	recipes_slider_formField.value=val;
	recipes_slider_form.submit();
}
 
function sliderInit(item, imgPath, pRecipes_slider_form, pRecipes_slider_formField, funcValSet) {
	 var timeSteps = 5;
	 var minTime = 5;
	 var maxTime = 50;
	
	 sliderInitParams(item, imgPath, pRecipes_slider_form, pRecipes_slider_formField, funcValSet, timeSteps, minTime, maxTime, 'pic_toggle_on.gif', 'pic_toggle_off.gif', 'icon_arrow_down.gif', 'icon_arrow_right.gif');
}

function sliderInitParams(item, imgPath, pRecipes_slider_form, pRecipes_slider_formField, funcValSet, timeSteps, minTime, maxTime, imgToggleOn, imgToggleOff, imgUnfold, imgFold) {

	 recipes_slider_time = new Slider('slider_RecipeTime', 'recipeSlider');
	 recipes_slider_time.setValueChangeFunc(sliderValueChanged);
     if(typeof window[funcValSet] == 'function')
		 recipes_slider_time.setMouseUpFunc(window[funcValSet]);
	 recipes_slider_time.setBlockIncrement(timeSteps);
	 recipes_slider_time.setUnitIncrement(timeSteps);
	 recipes_slider_time.setMaximum(maxTime);
	 recipes_slider_time.setValue(minTime);
	 recipes_slider_time.setMinimum(minTime);
	 
	 recipes_slider_form = pRecipes_slider_form;
	 recipes_slider_formField = pRecipes_slider_formField;
	 
	 var currentValue = recipes_slider_formField.value;
	 
	 if (currentValue!=null && currentValue!='') {
	 	if (currentValue<minTime) {
	 		currentValue=minTime; 
	 	}
	 	if (currentValue>maxTime) {
	 		currentValue=maxTime;
	 	}
	 	recipes_slider_time.setValue(currentValue);
	 } else {
	 	toggleBoxWithImg(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold);
	 }	 	 
 }
 
 function sliderToggle(item, imgPath, pRecipes_slider_formField, sliderToggleExec) {
	sliderToggleWithImg(item, imgPath, pRecipes_slider_formField, sliderToggleExec, 'pic_toggle_on.gif', 'pic_toggle_off.gif', 'icon_arrow_down.gif', 'icon_arrow_right.gif', '5', '');
 }

 function sliderToggleWithImg(item, imgPath, pRecipes_slider_formField, sliderToggleExec, imgToggleOn, imgToggleOff, imgUnfold, imgFold, startValue, orderBy) {
	toggleBox(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold);
	if($(item+'_body').visible()) {
		// Switched off
		emptyOrderHiddenField(orderBy);
		var curr = pRecipes_slider_formField.value;
		pRecipes_slider_formField.value='';
		if(curr!=null && curr!='' && curr>0)
	    	if(typeof window[sliderToggleExec] == 'function') window[sliderToggleExec]();
	} else {
		// Switched on
		addOrder2HiddenFields(orderBy);
		var sliderValue = pRecipes_slider_formField.value;
		if (sliderValue!=null && sliderValue!='' && sliderValue>0) {
			recipes_slider_time.setValue(sliderValue);
		} else {
			pRecipes_slider_formField.value=startValue;
			recipes_slider_time.setValue(startValue);
		}
	    if(typeof window[sliderToggleExec] == 'function') window[sliderToggleExec]();
	}	 
 }

function disableSlider(item, imgPath, pRecipes_slider_formField) {
	if($(item+'_body').visible()) {
		closeBox(item, imgPath);
		var curr = pRecipes_slider_formField.value;
		pRecipes_slider_formField.value='';
	}
}
 
} // end if (self.webfxSliderCompact_included)

// -------------- fading boxes -------------------
function toggleBox(item, imgPath) {
	toggleBoxWithImg(item, imgPath, 'pic_toggle_on.gif', 'pic_toggle_off.gif', 'icon_arrow_down.gif', 'icon_arrow_right.gif');
}

function toggleBoxWithImg(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold) {
	if($(item+'_body')) {
		if($(item+'_body').visible()) {
			$(item+'_boxOnOff').writeAttribute('src', imgPath + imgToggleOff);
			$(item+'_boxIcon').writeAttribute('src', imgPath + imgFold);
		} else {
			$(item+'_boxOnOff').writeAttribute('src', imgPath + imgToggleOn);
			$(item+'_boxIcon').writeAttribute('src', imgPath + imgUnfold);
		}
		new Effect.toggle($(item+'_body'), 'blind', {duration: 0.3}); 	
	}
}

/*
function closeBox(item, imgPath) {
	if($(item+'_body')) {
		if($(item+'_body').visible()) {
			$(item+'_boxOnOff').writeAttribute('src', imgPath + 'pic_toggle_off.gif');
			$(item+'_boxIcon').writeAttribute('src', imgPath + 'icon_arrow_right.gif');
			new Effect.toggle($(item+'_body'), 'blind', {duration: 0.3}); 	
		}
	}
}*/

//TODO delete when switched to content loaded boxes
function showArrow(item, imgPath) {
	showArrowWithImg(item, imgPath, 'icon_arrow_down.gif', 'icon_arrow_right.gif');
}

function showArrowWithImg(item, imgPath, imgUnfold, imgFold) {
	if($(item+'_body').visible()) {
		$(item+'_boxIcon').writeAttribute('src', imgPath + imgUnfold);
	} else {
		$(item+'_boxIcon').writeAttribute('src', imgPath + imgFold);
	}
}

function showIcon(item, name) {
	$(item+'_boxIcon').writeAttribute('src', name);
}

// ---------------- rating --------------------------
var selectedIndex;

function initRatingFilter(item, imgPath, ratingFormField) {
	initRatingFilterWithImg(item, imgPath, ratingFormField,  "star_over.gif", "star_off.gif", "star_selected.gif", 'pic_toggle_on.gif', 'pic_toggle_off.gif', 'icon_arrow_down.gif', 'icon_arrow_right.gif');
}

function initRatingFilterWithImg(item, imgPath, ratingFormField,  iconStarOver, iconStarOff, iconStarOn, imgToggleOn, imgToggleOff, imgUnfold, imgFold) {
	var rating = Number(ratingFormField.value);
	
	if (rating==null || rating=='' || rating<=0) {
		toggleBoxWithImg(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold);
	}
	else {
		toggleStarWithImg(rating, 'SET', imgPath, null, iconStarOver, iconStarOff, iconStarOn);
	}
}

//TODO delete when switched to content loaded boxes
function toggleRatingFilter(item, imgPath, ratingFormField, ratingToggleExec) {
	toggleRatingFilterWithImg(item, imgPath, ratingFormField, ratingToggleExec, 'pic_toggle_on.gif', 'pic_toggle_off.gif', 'icon_arrow_down.gif', 'icon_arrow_right.gif', '');
}

function toggleRatingFilterWithImg(item, imgPath, ratingFormField, ratingToggleExec, imgToggleOn, imgToggleOff, imgUnfold, imgFold, orderBy) {
	toggleBoxWithImg(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold);
	if($(item+'_body').visible()) {
		// Switched off
		emptyOrderHiddenField(orderBy);
		var curr = ratingFormField.value;
		ratingFormField.value='';
		if(curr!=null && curr!='' && curr>0)
	    	if(typeof window[ratingToggleExec] == 'function') window[ratingToggleExec]();
	} else {
		// Switched on
		var rating = ratingFormField.value;
		if (rating!=null && rating!='' && rating>0) {
			addOrder2HiddenFields(orderBy);
			toggleStarWithImg(rating, 'SET', imgPath, ratingToggleExec, iconStarOver, iconStarOff, iconStarOn);
		}
	}	
}

//TODO delete when switched to content loaded boxes
function toggleStar(index, state, imgPath) {
	toggleStar(index, state, imgPath, null);
}

//TODO delete when switched to content loaded boxes
function toggleStar(index, state, imgPath, execFunc)
{
	toggleStarWithImg(index, state, imgPath, execFunc, "star_over.gif", "star_off.gif", "star_selected.gif", false);
}

function toggleOneStar(index, state, imgPath, execFunc, starMouseOut)
{
	// needed for profile rating
	toggleStarWithImg(index, state, imgPath, execFunc, "star_over.gif", starMouseOut, "star_selected.gif", true);
}

function toggleStarWithImg(index, state, imgPath, execFunc, iconStarOver, iconStarOff, iconStarOn, oneStar)
{

	var starImg = imgPath + iconStarOver;
	var offImg = imgPath + iconStarOff;
	var selectedImg = imgPath + iconStarOn;
	// If requesting OFF state, change to turned-off graphic
	if (state=='OFF') {
		starImg = offImg;
	} else if (state == 'SET') {
		starImg = offImg;
		selectedIndex = index;
		index = 5;
	}
	// No "break" call used in switch because we want actions done to all stars at or below index level
	switch(index)
	{
		case 5:
			if(selectedIndex && selectedIndex > 4) {
				document.Star5.src = selectedImg;						
			} else {
				document.Star5.src = starImg;			
			}
			if(oneStar) break;
		case 4:
			if(selectedIndex && selectedIndex > 3) {
				document.Star4.src = selectedImg;						
			} else {
				document.Star4.src = starImg;
			}
			if(oneStar) break;
		case 3:
			if(selectedIndex && selectedIndex > 2) {
				document.Star3.src = selectedImg;						
			} else {
				document.Star3.src = starImg;			
			}
			if(oneStar) break;
		case 2:
			if(selectedIndex && selectedIndex > 1) {
				document.Star2.src = selectedImg;						
			} else {
				document.Star2.src = starImg;			
			}
			if(oneStar) break;
		case 1:
			if(selectedIndex && selectedIndex > 0) {
				document.Star1.src = selectedImg;						
			} else {
				document.Star1.src = starImg;			
			}
			if(oneStar) break;
	}	
	
	if (state=='SET' && execFunc!=null) {
		if(typeof window[execFunc] == 'function') window[execFunc](selectedIndex);
	}
}

// on "mouseover" selected images will be overwritten
function toggleStarOver(index, imgPath)
{
	var starImg = imgPath + "star_over.gif";
	var offImg 	= imgPath + "star_off.gif";
	
	document.Star5.src = offImg;
	document.Star4.src = offImg;
	document.Star3.src = offImg;
	document.Star2.src = offImg;
	document.Star1.src = offImg;
	
	// No "break" call used in switch because we want actions done to all stars at or below index level
	switch(index)
	{
		case 5:
			document.Star5.src = starImg;
		case 4:
			document.Star4.src = starImg;
		case 3:
			document.Star3.src = starImg;
		case 2:
			document.Star2.src = starImg;
		case 1:
			document.Star1.src = starImg;
	}
}

function getRecipesAsync(imgWaitScreen) {
	new Ajax.Updater('recipeSearchResultList','servlet/ajaxPage?clearfilter=true',
	{	asynchronous:true, 
		evalScripts:true, 
		onComplete:function(request){iBox.hide();}, 
		onLoading:function(request){iBox.showURL(imgWaitScreen);}, 
		method:'post', 
		parameters:getSearchParams()})
}

function getRecipesAsyncWithQuery(imgWaitScreen, query, withParams) {
	var q = 'servlet/ajaxPage?';
	if (query) {
		q = q + query + '&';
	}
	q = q + 'clearfilter=true';
	var params = {};
	if (withParams && withParams === true) {
		params = getSearchParams();
	}
	new Ajax.Updater('recipeSearchResultList',q,
	{	asynchronous:true, 
		evalScripts:true, 
		onComplete:function(request){iBox.hide();}, 
		onLoading:function(request){iBox.showURL(imgWaitScreen);}, 
		method:'post', 
		parameters: params})
}

function getSearchParams() {
	var params = "";
	params = Form.serializeElements( $('krlSearchForm').getInputs('hidden') );
	params = params.replace(/usersort=x/, "");

	return params;

}

function add2CurrentPage(val) {
	var elems = $('krlSearchForm').getInputs('hidden', 'currpage')
	if (elems.length > 0) {
		var field = elems[0];
		field.value = parseInt(field.value) + val;
	}
}

function substractFromCurrentPage(val) {
	var elems = $('krlSearchForm').getInputs('hidden', 'currpage')
	if (elems.length > 0) {
		var field = elems[0];
		field.value = parseInt(field.value) - val;
	}
}

// classifications filter functions -----------------------------------------------------------------

var PARAVALUES_SEPARATOR = '-';	

// toggle the claf box
function toggleClassificationsFilter(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold, formName, clafFormFieldName, clafToggleExec) {
	toggleBox(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold);
	if($(item+'_body').visible()) {
		// Switched off
		var clafFormField = $('krlSearchForm')[clafFormFieldName];
		var curr = clafFormField.value;
		if(curr!=null && curr!='') {
			emptyHiddenInput(clafFormFieldName);
			if(typeof window[clafToggleExec] == 'function') window[clafToggleExec](null, null);
		}
	} else {
		// Switched on
		initClafInputs(formName, clafFormFieldName);
	}	
}

// initalizes the claf box, depending on if the corresponding hidden field (in the search form) is set or not.
function initClafBox(item, imgPath, clafFormFieldName, imgToggleOn, imgToggleOff, imgUnfold, imgFold, formName) {
	var clafFormField = $('krlSearchForm')[clafFormFieldName];
	if (clafFormField==null || clafFormField.value==null || clafFormField.value=='') {
		toggleBoxWithImg(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold);
	}
	else {
		initClafInputs(formName, clafFormFieldName);
	}
}

// initalizes the claf box checkboxes, which means: checks those boxes, whose value is found
// in the corresponding hidden field (in the search form)
function initClafInputs(formName, clafFormFieldName) {
	var clafFormField = $('krlSearchForm')[clafFormFieldName];
	var clafIds = null;
	if (clafFormField != null && clafFormField.value != null && clafFormField.value != '') {
		clafIds =  clafFormField.value.split(PARAVALUES_SEPARATOR);
	}
	var inputs = $(formName).getInputs('checkbox', clafFormFieldName);
	for (var j = 0; j < inputs.length; j++) {
		if (isIn(clafIds, inputs[j].value)) {
			inputs[j].checked = 'checked';
		} else {
			inputs[j].checked = false;
		}			
	}
}

// nutritions filter functions ---------------------------------------------------------------------------------------------

// toggle the claf box
function toggleNutritionsFilter(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold, formName, formFieldName, toggleExec) {
	toggleBox(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold);
	if($(item+'_body').visible()) {
		// Switched off
		var formField = $('krlSearchForm')[formFieldName];
		var curr = formField.value;
		if(curr!=null && curr!='') {
			emptyHiddenInput(formFieldName);
			if(typeof window[toggleExec] == 'function') window[toggleExec](null, null);
		}
	} else {
		// Switched on
		initNutrInputs(formName, formFieldName);
	}	
}

// initalizes the claf box, depending on if the corresponding hidden field (in the search form) is set or not.
function initNutrBox(item, imgPath, formFieldName, imgToggleOn, imgToggleOff, imgUnfold, imgFold, formName) {
	var formField = $('krlSearchForm')[formFieldName];
	if (formField==null || formField.value==null || formField.value=='') {
		toggleBoxWithImg(item, imgPath, imgToggleOn, imgToggleOff, imgUnfold, imgFold);
	}
	else {
		initNutrInputs(formName, formFieldName);
	}
}


// initalizes the nutrition box radiobuttons, which means: checks that radiobutton, whose value is found
// in the corresponding hidden field (in the search form)
function initNutrInputs(formName, formFieldName) {
	var formField = $('krlSearchForm')[formFieldName];
	var value = null;
	if (formField != null && formField.value != null && formField.value != '') {
		value =  formField.value;
	}
	var inputs = $(formName).getInputs('radio', formFieldName);
	for (var j = 0; j < inputs.length; j++) {
		if (value!=null && value==inputs[j].value) {
			inputs[j].checked = 'checked';
		} else {
			inputs[j].checked = false;
		}
	}
}

// common functions -------------------------------------------------------------------------------------------------------------

// sets an empty value to input field (in the search form)
function emptyHiddenInput(formFieldName) {
	var formField = $('krlSearchForm')[formFieldName];
	if (formField != null) {
		formField.value = '';
	}
}

// processes the values of the checked filter box inputs to a hidden field in the search form
// it those are more than one, they will be seperated by var PARAVALUES_SEPARATOR
function moveInputValues2SearchForm(elem, formName, inputType) {
	if (elem) {
		var elems = $('krlSearchForm').getInputs('hidden', elem.name);
		var field = null;
		if (elems.length > 0) {
			field = elems[0];
		} else {
			field = document.createElement('input');
			field.type = 'hidden';
			field.name = elem.name;
			$('krlSearchForm').appendChild(field);
		}
		var inputs = $(formName).getInputs(inputType, elem.name);
		if (inputs.length > 0) {
			var newvalue = '';
			for (var i = 0; i < inputs.length; i++) {
				if (inputs[i].checked) {
					newvalue = newvalue + inputs[i].value+PARAVALUES_SEPARATOR;
				}
			}
			if (newvalue && newvalue.length > 0) {
				newvalue = newvalue.substr(0, newvalue.length-PARAVALUES_SEPARATOR.length);
			}
			field.value = newvalue;
		}
	}
}

function isIn(list, value) {
	if (list==null) return false;
	for (var i = 0; i < list.length; i++) {
		if (value==list[i]) return true;
	}
	return false;	
}

var ORDER_KEY = 'orderby';

function addOrder2HiddenFields(orderVal) {
	if (orderVal && orderVal.length > 0) {
		var elems = $('krlSearchForm').getInputs('hidden', ORDER_KEY)
		var field = null;
		if (elems.length > 0) {
			field = elems[0];
		} else {
			field = document.createElement('input');
			field.type = 'hidden';
			field.name = ORDER_KEY;
			$('krlSearchForm').appendChild(field);
		}
		field.value = orderVal;
	}
}

function emptyOrderHiddenField(orderVal) {
	var key= 'orderby';
	var elems = $('krlSearchForm').getInputs('hidden', ORDER_KEY)
	var field = null;
	if (elems.length > 0) {
		field = elems[0];
		// empty only, if set with given order value
		if (field.value == orderVal) {
			field.value = '';
		}
	} 
}

