 /*
	Requires MooTools

	The following classes will be added to global scope:
		- FullSearchResult
		- FullSearchResultFilter
		- CompactSearchResult

	The following javascript parameters should be available at global scope:
		(F) only necessary for full serach
		(C) only necessary for compact search
		- search_full_url: The url showing the full search result (html page)
		- search_full_asynchrone_url: The url returning search results to full search (F)
		- search_compact_asynchrone_url: The url returning search results to compact search (C)
		- search_filter_url: The url returning filter options (F)
		- search_similar_url: The url returning similar results (F)
		- search_compact_refresh_delay: delay before the compact search result will be updated (C)
*/


/**
 *	On mootools-event 'domready', create a new CompactSearchResult,
 *	FullSearchResult and FullSearchResultFilter classes,
 *	if their corresponding html-elements exists.
 */
var compact_search_result;
var full_search_result;
var full_search_result_filter;
var nextPage = 2;
window.addEvent('domready', function(){

	// jQuery extension used to retrive request parameters.
	$.extend({
		getUrlVars: function() {
			var vars = [], hash
			var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&')

			for(var i = 0; i < hashes.length; i++){
				hash = hashes[i].split('=')
				vars.push(hash[0])
				vars[hash[0]] = hash[1]
			}

			return vars;
		},
		getUrlVar: function(name){
			return $.getUrlVars()[name]
		}
	})

	if ($('full_search_result')) {
		full_search_result = new FullSearchResult();
	}
	if (($('compact_search') && !full_search_result && search_compact_on) || ($('compact_search') && full_search_result && search_compact_on)) {
		compact_search_result = new CompactSearchResult();
	}
});



/*
	Class representing the full search results
*/
function FullSearchResult() {

	/* shortcut to element */
	var list = $('full_search_result_list');

	var q = getQFromUrl();
	var a = getAFromUrl();
	var d = getDFromUrl();

	var params;

	/* the amount of pages displayed */
	var page = 1;
	/* only make one ajax request at a time */
	var busy = false;
	/* true if there are no more search results to fetch with ajax */
	var no_more_results = false;

	var main = $('full_search_result_filter');
	var header = $('full_search_result_filter_header');
	var fetch = $('full_search_result_filter_fetch');
	var classes = $('full_search_result_filter_classes');

	var filterFetched = false;
	var fetchingFilter = true;
	var filterCollapsed = true;

	selectSortFromUrl();
	initFilter();
	initSort();
	updateParams();
	
	/* comments below disables "the never ending page" functionality*/
	/*window.addEvent('scroll', windowScrolled);*/
	/*window.addEvent('resize', windowScrolled);*/
	
	initClickEvents();
	fillUpWindow();
	if (Browser.Engine.trident) {
		activateHoverForIE(list);
	}

	/* make public */
	this.q = q;
	this.a = a;
	this.d = d;

	this.updateParams = updateParams;
	this.updateResults = updateResults;
	this.goToMagicUrl = goToMagicUrl;

	function goToMagicUrl() {
		window.location = search_full_url + '?' + params;
		return false;
	}

	/**
	 * Fetch the search query from the ulr
	 * @return string the search query or an empty string if a query doesn't exist
	 */
	function getQFromUrl() {
		var match = window.location.search.match(/(\?|&)q=([^&]+)/);
		return (match && match[2]) ? match[2] : '';
	}

	function getAFromUrl() {
		var match = window.location.search.match(/(\?|&)a=([^&]+)/);
		return (match && match[2]) ? match[2] : '';
	}

	function getDFromUrl() {
		var match = window.location.search.match(/(\?|&)d=([^&]+)/);
		return (match && match[2]) ? match[2] : '';
	}


	/**
	 * Fetch the sort parameter from the url and select it in
	 * <select id="full_search_result_sort">
	 */
	function selectSortFromUrl() {
		var match = window.location.search.match(/&sort=([^&]+)/);
		if (match && match[1]) {
			var sort = $('sort_' + (match && match[1] ? match[1] : ''));
			if (sort) {
				sort.selected = true;
			}
		}
	}

	/**
	 *	One click-event for all clicks
	 */
	function initClickEvents() {
        list.onclick = function(e) {
            var evt = e || window.event;
            var target = evt.target || evt.srcElement;

            if (target && target.className.match(/\bfilter_result\b/)) {
                filterResult(target);
                return false;
            }
            if (target && target.className.match(/\btoggle_more_info\b/)) {
                toggleMoreInfo(target);
                return false;
            }
            if (target && target.className.match(/\more_results_link\b/)) {
                return false;
            }
            
            return true;
        };
        list.onmousedown = function(e) {
            var evt = e || window.event;
            var target = evt.target || evt.srcElement;
            if (target && target.className.match(/\bfilter_result\b/))
                return false;
            if (target && target.className.match(/\btoggle_more_info\b/))
                return false;
            if (target && target.className.match(/\more_results_link\b/)) {
                return false;
            }
            
            return true;
        };
        if (document.getElementById('full_search_result_sort')) {
        	document.getElementById('full_search_result_sort').onchange = updateResults;
        }
    }

	/**
	 *	Activate hover functionality missing in IE6 AND IE7 if xhtml is not used as format
	 */
	function activateHoverForIE(element) {
		var divs = element.getElementsByTagName('div');
		for (var i=0; i < divs.length; i++) {
			if (divs[i].className.match(/\bresult\b/)) {
				divs[i].onmouseover = function() {
					this.className = 'result result_hover';
					return true;
				};
				divs[i].onmouseout = function() {
					this.className = 'result';
					return true;
				};
			}
		};
	}

	function toggleMoreInfo(target) {
		var matches = $(target).getProperty('href').match(/#(more_info_(\d+))$/);
		if (matches && matches[1] && matches[2]) {
			var toggle_target = $(matches[1]);
			target.toggleClass('open');
			toggle_target.toggleClass('open');
			var similar_results = $('similar_results_' + matches[2]);
			var more_info = $('more_info_' + matches[2]);
			if (similar_results.innerHTML == '') {
				similar_results.addClass('loading');
				getSimilarResults(matches[2], similar_results, more_info);
			}
		}
	}

	function filterResult(target) {
		var href = $(target).getProperty('href');
		var matches = href.match(/(&|\?)([^&\=]+)=[^=]+$/);
		if (matches && matches[2]) {
			var options = $$('#full_search_result_filter_' + matches[2] + ' li');
			for (var i=0,il=options.length; i<il; i++) {
				if (options[i].getElement('label').getText() == target.getText()) {
					options[i].getElement('input').click();
					i=il;
				}
			}
		}
	}

	function getSimilarResults(id, target, more_info) {
		var xhr = new Request({
			url: search_similar_url,
			method: 'get',
			async: 'false',
			onSuccess: function(responseText, responseXML){
		   		if (this.xhr.responseText != '') {
            		target.innerHTML = this.xhr.responseText;
	                more_info.getElement('p').setStyle('display', 'block');
                }
				target.removeClass('loading');
			},
			onFailure: function () {
				busy = false;
			}
		});
		xhr.send('id=' + id +'&a=' +encodeURIComponent(a) + '&d=' + encodeURIComponent(d));
	}

	function fillUpWindow() {
		updateParams();
		if (fetchingFilter && search_filter_fetch != 0) {
			timeout_id = window.setTimeout(fillUpWindow, 500);
		} else if (!filterCollapsed) {
			timeout_id = window.setTimeout(fillUpWindow, 500);

		} else if (!windowFilledUp()) {
			var xhr = new Request( {
				url :search_full_asynchrone_url,
				method :'get',
				async :'false',
				onSuccess : function(responseText, responseXML) {
					addResults(this.xhr.responseText);
					fillUpWindow();
				}
			});
			xhr.send(params + '&page=' + ++page + '&a=' + encodeURIComponent(a)
					+ '&d=' + encodeURIComponent(d));
		}
	}

	function windowFilledUp() {

		if (no_more_results) {
			return true;
		}
		if (document.body.clientHeight == document.body.scrollHeight) { // xhtml standard-mode, use mootools
			return (window.getHeight() < window.getScrollHeight());
		} else {
			return  (document.body.clientHeight <  document.body.scrollHeight);
		}

	}

	function windowScrolled() {
		if (!busy && isBottomReached()) {
			busy = true;
			var xhr = new Request({
				url: search_full_asynchrone_url,
				method: 'get',
				async: 'false',
				onSuccess: function(responseText, responseXML){
					addResults(this.xhr.responseText);
					busy = false;
				},
				onFailure: function () {
					busy = false;
				}
			});
			xhr.send(params + '&page=' + ++page + '&a=' +encodeURIComponent(a) + '&d=' + encodeURIComponent(d));
		}
	}

	/**
	 *	Is the bottom of the page reached? This is used for the "never ending page"
	 *	functionality
	 *
	 * @return	true if the window is scrolled to the bottom and no_more_results==true, false otherwise
	 */
	function isBottomReached() {
		if (no_more_results)
			return false;
		
		return (jQuery(window).scrollTop() == jQuery(document).height() - jQuery(window).height()) ? true : false
		
/*		if (document.body.clientHeight == document.body.scrollHeight) { // xhtml standard-mode, use mootools
			return (window.getHeight() + window.getScrollTop() > window.getScrollHeight() - 200);
		}
		else  {// quirks-mode, the body tag holds the scroll list
			return  (document.body.clientHeight + document.body.scrollTop >  document.body.scrollHeight - 200);
		}*/
	}

	function addResults(responseText) {
		var results = new Element('div');
		results.innerHTML = responseText;
		if (responseText.length > 0) {
			list.appendChild(results);
			var div = results.getElement('#total_hits');
			if (div)
				div.dispose();
			if (Browser.Engine.trident)
				activateHoverForIE(results);

			no_more_results = false;
		} else {
			no_more_results = true;
		}
	}

	function updateParams() {
		var elements = document.forms['full_search_form'].elements;
		if (document.getElementById('full_search_result_sort')) {
			params = 'q=' + q + '&sort=' + elements.sort.value;
		} else {
			params = 'q=' + q;
		}

			for (var i=0, il=elements.length; i<il; i++) {
				if (elements[i].checked && !elements[i].id.match(/_0$/)) {
					var filter_class = elements[i].id.replace(/_option_\d+/, '');
					var re = new RegExp("(^|&|\\?)" + filter_class + "=");
					var re2 = new RegExp("(\b\+\b)");
					elements[i].value.replace(re2, ' ');

					if (params.match(re)) {
						re = new RegExp("((^|&|\\?)" + filter_class + "=[^&\\?]+)");
						params = params.replace(re, "$1," + elements[i].value);
					} else
						params += ('&' + filter_class + '=' + elements[i].value);
				}
			};

		}

	function updateResults() {
		no_more_results = false;
		page = 1;
		updateParams();
		$('full_search_result_filter_header').addClass('loading');
		var xhr = new Request( {
			url :search_full_asynchrone_url,
			method :'get',
			onSuccess : function(responseText, responseXML) {
				list.innerHTML = this.xhr.responseText;
				var div = list.getElement('#total_hits');
				if (div) {
					var total_hits = div.innerHTML;
					div.dispose();
					$('full_search_result_total_hits').innerHTML = total_hits;
				} else {
					$('full_search_result_total_hits').innerHTML = "0 ";
				}
				if (Browser.Engine.trident)
					activateHoverForIE(list);
				$('full_search_result_filter_header').removeClass('loading');

				fillUpWindow();

			},
			onFailure : function() {
				$('full_search_result_filter_header').removeClass('loading');
			}
		});
		xhr.send(params + '&a=' + encodeURIComponent(a) + '&d='	+ encodeURIComponent(d));
	}
	/* filter */

	/**
	 * Initiate filter
	 *
	 * @return void
	 */
	function initFilter() {
		if (search_filter_on) {
			if (search_filter_fetch) {
				main.style.display = 'inline';
				fetchFilter();
			} else {
				fetch.style.display = 'inline';
				fetch.getElement('a').onclick = function() {
					fetch.style.display = 'none';
					main.style.display = 'inline';
					fetchFilter();
					return false;
				};
			}
		} else {
			fetch.style.display = 'none';
		}
	}

	/**
	 * Initiate sort
	 * @return void
	 */
	function initSort() {

		var sort = $('sort_Relevance');
		if (sort) {
			sort.selected = true;
		}
	}

	/**
	 * Load filters from url pointed to by global javascript parameter "search_filter_url".
	 * @return void
	 */
	function fetchFilter() {

		header.addClass('loading');
		fetchingFilter = true;
		var xhr = new Request( {
			url :search_filter_url,
			method :'get',
			onSuccess : function(responseText, responseXML) {
				fetchingFilter = false;
				filterFetched = true;
				classes.innerHTML = this.xhr.responseText;
				classes.getElements('ul li input').each( function(item) {
					item.onclick = optionClicked;
					item.onmousedown = function() {
						return false;
					};
				});
				classes.getElements('ul li.selected input').each(
						function(item) {
							item.checked = true;
						});
				classes.getElements('h4 a').each( function(item) {
					item.onclick = changeClicked;
					item.onmousedown = function() {
						return false;
					};
				});
				main.addEvent('mouseleave', condenseFilter);
				main.addEvent('mouseenter', uncondenseFilter);
				header.removeClass('loading');
				selectFilterFromUrl();
				if ($('magic_url'))
					$('magic_url').onclick = full_search_result.goToMagicUrl;
			},
			onFailure : function() {
				header.removeClass('loading');
			}
		});

		xhr.send('q=' + q + '&a=' + a + '&d=' + d);

	}

	/**
	 * Select all filters from the url.
	 * @return void
	 */
	function selectFilterFromUrl() {
		var match = window.location.search.match(/[\?&]([^=]+)=([^&]+)/g);
		if (match) {
			match.each(function(item) {
				var param = item.match(/^[\?&]([^=]+)=([^&]+)$/);
				var options = $$('#full_search_result_filter_' + param[1] + ' li');
				if (options) {
					param[2].split(',').each(function(item) {
						options.each(function(option) {
							var input = option.getElementsByTagName('input')[0];
							if (input.value == item) {
								input.checked = true;
								option.className = 'selected';
								options[0].getElementsByTagName('input')[0].checked = false;
								options[0].className = '';
							}
						});
					});
				}
			});
			updateParams();
		}
	}

	/**
	 * Don't collapse filter if mouse pointer if hovering the filter
	 * @return void
	 */
	function uncondenseFilter() {
		filterCollapsed = false;
		if (this.waiting_to_be_condensed_id > 0) {
			window.clearTimeout(this.waiting_to_be_condensed_id);
			this.waiting_to_be_condensed_id = 0;
		}
		fillUpWindow();
	}

	/**
	 * Collapse filter when mouse pointer stays outside the filter for more than 2 seconds.
	 * $return void
	 */
	function condenseFilter () {
		filterCollapsed = true;
		var that = this;
		this.waiting_to_be_condensed_id = window.setTimeout(function(){
			if (that.waiting_to_be_condensed_id > 0) {
				that.getElements('ul').each(function(item) {
					item.addClass('compact');
					$(item.parentNode).getElement('h4 span.right a').removeClass('open');
				});
				that.waiting_to_be_condensed_id = 0;
				fillUpWindow();
			}
		},2000);
		fillUpWindow();

	}

	function changeClicked() {
		var match = this.id.match(/^(.*)_change$/);
		$(this).toggleClass('open');
		if (match && match[1])
			var filter_option = $(match[1]).toggleClass('compact');

		return false;
	}

	function optionClicked() {
		var match = this.id.match(/^(.*)_option_([0-9]+)$/);
		var filter_class = (match && match[1]) ? match[1] : '';
		var index = (match && match[2]) ? match[2] : '';
		var ul = $('full_search_result_filter_' + filter_class);
		var option_0 = $(filter_class + '_option_0');
		if (this.checked && index > 0) {
			$(option_0.parentNode).removeClass('selected');
			option_0.checked = false;
			$(this.parentNode).addClass('selected');
		} else if (this.checked && index == 0) {
			ul.getElements('li.selected').each(function(item) {
				item.getElement('input').checked = false;
				item.removeClass('selected');
			});
			$(this.parentNode).addClass('selected');
		} else if (index > 0) {
			$(this.parentNode).removeClass('selected');
			if (ul.getElements('li.selected').length == 0) {
				$(option_0.parentNode).addClass('selected');
				option_0.checked = true;
			}
		} else {
			this.checked = true;
			return true;
		}
		updateResults();
		return true;
	}
}


/*
 * Class representing the compact search result
 */
function CompactSearchResult() {

	var single_row = true;
	var timeout_id = 0;
	var measure_text;
	var a = getAFromUrl();
	var d = getDFromUrl();

	inputToTextArea();
	initClickEvents();
	initCompactSearchFrameBackground();
	initCloseButtons(); /* Arnolds, MRM Starsky 2011-02-07 */
	initMaxCharactersForTextArea(); /*Arnolds, MRM Starsky 2011-03-03 */
	
	function initClickEvents() {
		$('compact_search').onclick = function(e) {
			var evt = e || window.event;
			var target = evt.target || evt.srcElement;
			var target_class = (target && target.className) ? target.className
					: '';
			if (target_class.match(/\bshow_more_results\b/)) {
				showMoreResults(target);
				return false;
			}
			if (target_class.match(/\bshow_more_info\b/)) {
				toggleMoreInfo(target);
				return false;
			}
			if (target_class.match(/\blink\b/)) {
				$('search_textarea').setAttribute('rows', 1);
				return true;
			}
			return true;
		};
		$('compact_search').onmousedown = function(e) {
			var evt = e || window.event;
			var target = evt.target || evt.srcElement;
			if (target.className.match(/\bshow_more_results\b/))
				return false;
			if (target.className.match(/\bshow_more_info\b/))
				return false;
			return true;
		};
		$('search').onclick = function(e) {
			$('search_text').value = $('search_textarea').value;
			return true;
		};
	}
	/*
	 * Activate hover functionality missing in IE6 (AND IE7 in non-XHTML-mode)
	 */
	function activateHoverForIE() {
		var results = $$('#compact_search_result div.doctype div.row');
		for (var i=0, il=results.length; i<il;i++) {
			results[i].addEvent('mouseenter', function () { this.addClass('row_hover'); });
			results[i].addEvent('mouseleave', function () { this.removeClass('row_hover'); });
		}
	}

	/*
		Set the opacity for <div id="compact_search_frame_background"></div>,
		and, if browser is ie6 (here we go again...), set height to 100% of parent element
	*/
	function initCompactSearchFrameBackground() {
		if (Browser.Engine.trident) {
			var element = $('compact_search_frame_container');
			var shadow = $('compact_search_frame_background');
			var iframe = null;
			if (Browser.Engine.trident4)
				iframe = $('compact_search_frame').appendChild(new Element('iframe'));
			updateHeight();
			element.onresize = updateHeight;
			function updateHeight () {
				shadow.setStyle('height', element.clientHeight + 'px');
				if (Browser.Engine.trident4)
					iframe.setStyle('height', element.clientHeight + 'px');
			}
		}
	}

	/*
		Initiate all "show more"-buttons. Add onclick-events to toggle more info.
	*/
	function toggleMoreInfo (target) {
		var matches = $(target).getProperty('href').match(/#(.*)$/);
		if (matches && matches[1]) {
			var more_info = $(matches[1]);
			var display = more_info.getStyle('display') == 'block' ? 'none' : 'block';
			target.toggleClass('open');
			more_info.setStyle('display', display);
		}
	}

	function showMoreResults(target) {
		$(target.parentNode).setStyle('display', 'none');
		var matches = $(target).getProperty('href').match(/#((more_results_)\d+)$/);
		if (matches && matches[1]) {
			$(matches[1]).setStyle('display', 'block');
		}
	}
	
	 /* Arnolds, MRM Starsky 2011-03-03 */
	 function adjustHeight(element, evt) {
        if (element.scrollHeight > element.clientHeight + 3) {
            while (element.scrollHeight > element.clientHeight && parseInt(element.getAttribute('rows')) < 5) {
                if (single_row) {
                    makeMultiRowTextArea(element);
                } else {
                    element.setAttribute('rows', parseInt(element.getAttribute('rows'))+1);
                }
                // the row below looks unnecessary, but it's NOT
                element.scrollHeight + ':' + element.clientHeight;
            }
        } else if (!single_row && ((evt && evt.key == 'delete') || (evt && evt.key == 'backspace'))) {
            do {
                if (parseInt(element.getAttribute('rows')) > 1) {
                    element.setAttribute('rows', parseInt(element.getAttribute('rows'))-1);
                }
                // the row below looks unnecessary, but it's NOT
                element.scrollHeight + ':' + element.clientHeight;
            } while ((element.scrollHeight == element.clientHeight && parseInt(element.getAttribute('rows')) > 1))
            if (element.scrollHeight > element.clientHeight) {
                element.setAttribute('rows', parseInt(element.getAttribute('rows'))+1);
                // the row below looks unnecessary, but it's NOT
                element.scrollHeight + ':' + element.clientHeight;
            }
            if (parseInt(element.getAttribute('rows')) == 1 && window.gecko) {
                measure_text.innerHTML = element.value;
                if (measure_text.scrollWidth < element.clientWidth && !element.value.match(/\n/)) {
                    makeSingleRowTextArea(element);
                }
            }
            if (parseInt(element.getAttribute('rows')) == 1 && Browser.Engine.trident) {
                makeSingleRowTextArea(element);
            }
        }
	}
	/* END! Arnolds, MRM Starsky 2011-03-03 */

	function keyUp(e) {
		var evt = new Event(e);
		if (timeout_id)
			window.clearTimeout(timeout_id);
		timeout_id = window.setTimeout(hasTimedOut, 500);
		adjustHeight(this, evt);
		this.key_is_pressed = false;
		return false;
	}

	function keyPress (e) {
		var evt = new Event(e);
		if (evt.key == 'enter' && !evt.shift) {
			if (timeout_id) {
				window.clearTimeout(timeout_id);
			}
			$('search').click();
			return false;
		}
		if (this.key_is_pressed) {
			adjustHeight(this, evt);
		}
		this.key_is_pressed = true;
		return true;
	}

	function bling() {
		$('compact_search').addClass('bling');
		$('search_label').style.display = 'none';
		setStatusForTopCloseButton(true); /* Arnolds, MRM Starsky 2011-02-07 */
		addGlobalClose(); /* Arnolds, MRM Starsky 2011-02-07 */
		
		return true;
	}

	function noBling() {
		if (this.value.trim() == '') {
			$('compact_search').removeClass('bling');
			$('search_label').style.display = 'inline';
			setStatusForTopCloseButton(false); /* Arnolds, MRM Starsky 2011-02-07 */

		}
		return true;
	}

	function inputToTextArea() {
		if (window.gecko) {
			measure_text = $E('#compact_search fieldset').appendChild(
				new Element('span', {'id':'measure_text'})
			);
		}
		$('search_text').style.display = 'none';
		var textarea = $('search_textarea');

		textarea.style.display = 'inline';
		textarea.onkeyup = keyUp;
		textarea.onkeypress = keyPress;
		textarea.onfocus = bling;
		textarea.onblur = noBling;
		if(!textarea.value.trim()) {
			$('search_label').style.display = 'inline';
		} else {
			textarea.focus();
			hasTimedOut();
		}
		makeSingleRowTextArea(textarea);
		adjustHeight(textarea);
	}

	function makeSingleRowTextArea(element) {
		/* Arnolds, MRM Starsky 2011-03-03 */
		element.style.height = '26px';
		if(element.nodeName.toLowerCase() == "textarea"){
			 element.rows = 1; 	 
		}
		/* END! Arnolds, MRM Starsky 2011-03-03 */
		single_row = true;
	}

	function makeMultiRowTextArea(element) {
		element.style.height = 'auto';
		single_row = false;
	}

	function hasTimedOut() {
		timeout_id = 0;
		var q = $('search_textarea').value.trim();

		if (q.length < 2) {
			$('compact_search_content').setStyle('display', 'none');
			setHintStatus(true); /* Arnolds, MRM Starsky 2011-02-07 */
		} else {
			var xhr = new Request({
				url: search_compact_asynchrone_url,
				method: (q.length < 128) ? 'get' : 'post',
				onSuccess: function(responseText, responseXML) {
					if ($('search_textarea').value.trim().length < 2) {
 		   				return false;
					}
					$('compact_search_content').setStyle('display', 'block');
					$('compact_search').addClass('bling');
					$('compact_search_content').innerHTML = this.xhr.responseText;
					if (Browser.Engine.trident) {
						activateHoverForIE();
					}
					setHintStatus(false); /* Arnolds, MRM Starsky 2011-02-07 */
				}
			});
			xhr.send('q=' + encodeURIComponent(q)+'&d=' + search_home_dep);
		}
	}

	function getAFromUrl() {
		var match = window.location.search.match(/(\?|&)a=([^&]+)/);
		return (match && match[2]) ? match[2] : '';
	}

	function getDFromUrl() {
		var match = window.location.search.match(/(\?|&)d=([^&]+)/);
		return (match && match[2]) ? match[2] : '';
	}
	/* Arnolds, MRM Starsky 2011-02-07 */
	function setHintStatus(visible){	
		if($('compact_search_hint') != undefined){
			if(visible)
				$('compact_search_hint').style.display = "block";
			else
				$('compact_search_hint').style.display = "none";
		}
		setCloseButtonEvents();
	}
	function setCloseButtonEvents(){
		var close_btn = $('compact_search_close_link');
		if(close_btn != null){
			close_btn.onclick = function(){
				closeSearch();
				return false;
			};	
		}
	}
	function addGlobalClose(){
		$$('body').addEvent('click', onBodyClick);
	}
	function onBodyClick(e){
		try{
			var showingParent = $('compact_search_frame_border_outer');
			if(showingParent && !e.target || !$(e.target).getParents().contains(showingParent)) { 
				closeSearch();
			}
		}catch(ex){ /* Silent error */ }
	}
	function closeSearch(){
		try{
			if (timeout_id)
				window.clearTimeout(timeout_id);
			setStatusForTopCloseButton(false);
			if($('compact_search_hint') != null) $('compact_search_hint').style.display = '';
			makeSingleRowTextArea($('search_textarea'));
			if($('compact_search_result') != null) $('compact_search_result').innerHTML = "";
			
			if($('compact_search_content') != null) $('compact_search_content').style.display = "none";
			
			if($('compact_search') != null) $('compact_search').removeClass('bling');
			if($('search_label') != null) $('search_label').style.display = 'inline';
			if($('search_textarea') != null) $('search_textarea').value = "";
			if($('search_textarea') != null) $('search_textarea').blur();
			if($('search_text') != null) $('search_text').value = "";
			
			$$('body').removeEvent('click', onBodyClick);
		}catch(ex){  /* Silent error */ }
	}
	function setStatusForTopCloseButton(visible){
		if($('compact_search_close_btn') != undefined){
			if(visible)
				$('compact_search_close_btn').style.display = 'block';
			else
				$('compact_search_close_btn').style.display = 'none';
		}
	}	
	
	function initCloseButtons(){
		// Add close btn 2
		var close_btn = document.createElement("div");
		close_btn.id =  "compact_search_close_btn";
		close_btn.style.display = "none";
		$$('#compact_search form fieldset span.right')[0].insertBefore(close_btn, $$('#compact_search form fieldset span.right input')[0]);
		close_btn.onclick = function(){ 
			closeSearch(); 
			$('search_textarea').focus();
		};
		// ---	
	
	}
	/* END! Arnolds, MRM Starsky 2011-02-07 */	
	
	/* Arnolds, MRM Starsky 2011-03-03 */	
	function initMaxCharactersForTextArea(){
		var maxChars = 115;
		var textArea = $('search_textarea');
		
		var fixCharacterLength = function(target){
			var chars = target.get("value").trim().length;
			if (chars >= maxChars) {
				target.set("value", target.get("value").substring(0,maxChars));
			}
		};
		
		textArea.addEvents({
			focus: function(){
				fixCharacterLength(textArea);
			},
			keyup: function(){
				fixCharacterLength(textArea);
			},
			keydown: function(){
				fixCharacterLength(textArea);
			}
		});
	}
	/* END! Arnolds, MRM Starsky 2011-03-03 */	
}


