
/***************************************************************
*  Copyright notice
*
*  (c) 2006 WIV GmbH (info@wiv-gmbh.de)
*  All rights reserved
*
*
***************************************************************/
/**
 * searchBoxes-javascript for the 'Pferde.de-Relaunch 2006'-project
 *
 * @author	Andreas Richter <richter@wiv-gmbh.de>
 */

/*
 * check if value is already selected
 *
 */

function searchBox_inSelected(id, options) {
	var result = false;
	for (var c=0; c<options.length; c++) {
		if (options[c].value==id) {
			result = true;
		}
	}
	return result;
}

/*
 * sort the selected values
 *
 */

function searchBox_sortSelected(object) {
	var sortedOptions = new Array();

	for (var c=0; c<object.options.length; c++) {
		sortedOptions[sortedOptions.length] = new Option(object.options[c].text, object.options[c].value, object.options[c].defaultSelected, object.options[c].selected) ;
	}

	sortedOptions = sortedOptions.sort( 
		function(a,b) { 
			if ((a.text+"") < (b.text+"")) { return -1; }
			if ((a.text+"") > (b.text+"")) { return 1; }
			return 0;
			} 
		);

	for (var c=0; c<sortedOptions.length; c++) {
		object.options[c] = new Option(sortedOptions[c].text, sortedOptions[c].value, sortedOptions[c].defaultSelected, sortedOptions[c].selected);
	}
}


/*
 * selectItem function
 * moves selectable to selected
 *
 */

function searchBox_select(selectable, selected, allMarker, config, startValue, selectedValue) {
	if (selectedValue) {
		for (var c=0; c<selectable.options.length; c++) {
			if (selectable.options[c].value==selectedValue) {
				selectedElement = selectable.options[c];
			}
		}
	}
	else {
		selectedElement = selectable.options[selectable.selectedIndex];
	}
	if (!searchBox_inSelected(selectedElement.value,selected.options)) {
		// create new option in selected
		if (!selectedValue) {
			selectable.options[selectable.selectedIndex].className = 'selected';
			selectable.options[selectable.selectedIndex].selected = false;
		}
		var newSelected = document.createElement("option");
	  	newSelected.text = selectedElement.text;
	  	newSelected.value = selectedElement.value;
		selected.add(newSelected, document.all?selected.options.length:null);
		searchBox_sortSelected(selected);
		allMarker.checked = false;
		// create new input hidden field in form
		var newHidden = document.createElement("input");
		newHidden.type = 'hidden';
		newHidden.name = selected.name+'[]';
		newHidden.id = selected.id+'_'+selectedElement.value;
		newHidden.value = selectedElement.value;
		selected.form.appendChild(newHidden);
		// update config
		searchBox_updateConfig(config, allMarker, selected);
		if (startValue && document.getElementById(startValue)) {
			document.getElementById(startValue).value = 0;
		}
	}
}

/*
 * unselectItem function
 * moves selectable to selected
 *
 */

function searchBox_unselect(selectable, selected, allMarker, config, startValue) {
	selectedElement = selected.options[selected.selectedIndex];	
	for (var c=0; c<selectable.options.length; c++) {
		if (selectable.options[c].value==selected.options[selected.selectedIndex].value) {
			selectable.options[c].className = 'selectable';
		}
	}
	selected.remove(selected.selectedIndex);
	allMarker.checked = selected.options.length?false:true;
	// remove input hidden field in form
	selected.form.removeChild(document.getElementById(selected.id+'_'+selectedElement.value));
	// update config
	searchBox_updateConfig(config, allMarker, selected);	
	if (startValue && document.getElementById(startValue)) {
		document.getElementById(startValue).value = 0;
	}	
}



/*
 * search-box-switch
 *
 */

function searchBox_switch(searchBox, ocButton, openImage, closeImage, config) {
	config.style.visibility		= (ocButton.src  == openImage)	? 'hidden'		:'visible';
	searchBox.style.display 	= (ocButton.src  == openImage)	? 'block'		:'none';
	ocButton.src				= (ocButton.src  == openImage)	? closeImage	:openImage;
	//alert(ocButton.src);
}


/*
 * update config
 *
 */

function searchBox_updateConfig(config, allMarker, selected) {
	var configTextArray = config.lastChild.lastChild.data.split(';');
	var configText = new Object();
	for (var c=0; c<configTextArray.length; c++) {
		var elements = configTextArray[c].split(':');
		configText[elements[0]] = elements[1];
	}
	if (selected.options.length==1) {
		var newConfig = configText['title_singular']+' "'+selected.options[0].text+'" '+configText['selected'];
	}
	else {
		var newConfig = (allMarker.checked?configText['all']:selected.options.length)+' '+(selected.options.length==1?configText['title_singular']:configText['title_plural'])+' '+configText['selected'];
	}
	config.firstChild.replaceData(0, config.firstChild.data.length, newConfig);
}


/*
 * handle click on all-marker
 *
 */

function searchBox_handleAllMarker(allMarker, selected, config) {
	if (!selected.options.length) {
		allMarker.checked = true;
	}
	searchBox_updateConfig(config, allMarker, selected);
}

/*
 * handle the search-query
 *
 */

function searchBox_handleSearchQuery(searchQuery, config) {
	var configTextArray = config.lastChild.lastChild.data.split(';');
	var configText = new Object();
	for (var c=0; c<configTextArray.length; c++) {
		var elements = configTextArray[c].split(':');
		configText[elements[0]] = elements[1];
	}
	if (searchQuery.value.length) {
		var newConfig = configText['title']+' "'+searchQuery.value+'" ';
	}
	else {
		var newConfig = configText['none'];
	}
	config.firstChild.replaceData(0, config.firstChild.data.length, newConfig);

}

/*
 * handle config change
 *
 */

function searchBox_handleConfig(sortBy, sortOrder, config) {
	var configTextArray = config.lastChild.lastChild.data.split(';');
	var configText = new Object();
	for (var c=0; c<configTextArray.length; c++) {
		var elements = configTextArray[c].split(':');
		configText[elements[0]] = elements[1];
	}
	var newConfig = configText['sort_title']+' "'+configText['sort_by_'+sortBy.value]+'" "'+configText['sort_order_'+sortOrder.value]+'" ';
	config.firstChild.replaceData(0, config.firstChild.data.length, newConfig);

}