
$(document).ready(function() 
{
	var sSearchAgentSelectedCity= $('#advSearchText').val();
	var sEnteredSelectedCity;
	var nLengthStrategySwitch = 20;
		
	$(document).keyup(function(e) {
		if (e.keyCode == 27 && $('.advSearchBackLayer').css('display') != 'none' ) {
			if(!$('div#advsResultContainer').hasClass('invisible')) {
				$('div#advsResultContainer').addClass('invisible');
			}
			$('#advSearchText').val('');
			$('.advSearchBackLayer').hide();
		}
	});
	
	$('.advSearchBackLayer').bind('click', function() {
		if(!$('div#advsResultContainer').hasClass('invisible')) {
			$('div#advsResultContainer').addClass('invisible');
		}
		//$('#advSearchText').val('')	;
		$('.advSearchBackLayer').hide();
	});
	
	$('#btnOk').click(function() {
		sSearchAgentSelectedCity = advsSubmitSelectionHandler(sSearchAgentSelectedCity);
	});
	
	$('#advsResultActionsShowAll').hide();
	$('#advsResultActionsShowAll').click(function(){
		if (advs_query.length >= nLengthStrategySwitch) {
			advsDisplayDistrictSelectBox(advsGetOrderedResultData(advs_filteredResultData), advs_limit_total);
		} else {
			advsDoSearch(advs_limit_total, advs_limit_total, 'cityName');
		}
	});
	
	// Stadt, Ort Listener
	$('#advSearchText').bind('focus', function(e) {
		sTypedSelectedCity = $(this).attr('value');
		advs_sresult = {};
		advs_EmptyInput = true;		
		$('#advSearchText').val('');
		$('div#advsResultContainer').addClass('invisible');
	}).focusout( function(e){
					if ($('#advSearchText').val().length < 50 ){
						$('#advSearchText').val(sSearchAgentSelectedCity);
						$('.advSearchBackLayer').hide();
					}
					$('#searchResult input:checkbox').live('click',function() {
						$('#advSearchText').val(sEnteredSelectedCity);
					});
	});//end of focusout event

	$('#advSearchText').bind('keyup', function(e) 
	{
		if (e.keyCode == 27) {
			return;
		}
		var searchValue = sEnteredSelectedCity = $(this).attr('value');
		advs_query = $(this).val();
		if (searchValue.length == 0) {
			advs_EmptyInput = true;
			$('div#advsResultContainer').addClass('invisible');
			$('.advSearchBackLayer').hide();
			// remove sresult
			advs_sresult = {};
			
		} else if (searchValue.length < nLengthStrategySwitch) {
			advs_EmptyInput = false;
			advsDoSearch(advs_limit, advs_limit, '');
			advs_hasFullResult = false;
			
		} else if (searchValue.length == nLengthStrategySwitch || advs_hasFullResult == false || advs_EmptyInput == true) {
			// bei einer zeichenlaenge von 3 alle treffer vom server holen
			advs_EmptyInput = false;
			advsDoSearch(advs_limit_total, advs_limit, '');
			advs_hasFullResult = true;
		} else if (searchValue.length > nLengthStrategySwitch) {
			// bei einer zeichenlaenge ueber 3 alle treffer client-seitig filtern
			advs_EmptyInput = false;
			var tmp_filteredResultData = advsGetFilteredResultData(searchValue);
			//console.log(advs_filteredResultData.length + " / " + tmp_filteredResultData.length);
			if (advs_filteredResultData.length != tmp_filteredResultData.length) {
				advs_filteredResultData = tmp_filteredResultData;
				advsDisplayDistrictSelectBox(advs_filteredResultData, advs_limit);
			}
		}
	});
});



function advsDoSearch(serverLimit, displayLimit, orderBy)
{
	$.getJSON(advs_surl, {q: advs_query, s: advs_state, l:serverLimit, o:orderBy }, function(data) {
		advs_data = data;
		advsDisplayDistrictSelectBox(advsGetFilteredResultData($('#advSearchText').attr('value')), displayLimit);
		//advsDisplayDistrictSelectBox(data);
		if (data.length>0) {
			$('div#advsResultContainer').removeClass('invisible');
			$('.advSearchBackLayer').show();
		} else {
			$('#advSearchText').val('');
		}
	});
}



function advsGetFilteredResultData(inputString)
{
	var data = new Array();
	var itemLabel = '';
	var foundInputSubString = true;

	if (inputString == "") {
		return data;
	}
	
	// inputStringArr fuer die suche vorbereiten
	regExArr = new Array();
	$.each(inputString.split(" "), function(i,inputSubString) {
		inputSubString = inputSubString.replace(/,/, "");
		regExArr.push(new RegExp(inputSubString,'i'));
	});
	
	if (advs_data.length > 0) {
		for (i=0; i < advs_data.length; i++) {
			foundInputSubString = true;
			// item {id, label, type, results}
			itemLabel = advs_data[i].label;
			for (j=0; j < regExArr.length; j++) {
				if (itemLabel.search(regExArr[j]) == -1) {
					foundInputSubString = false;
					break;
				}
			}
			if (foundInputSubString == true) {
				data.push(advs_data[i]);
			}
		}
	}
	return data;
}



// return all ordered city results
function advsGetOrderedResultData(myData)
{
	var outputData = myData.copy();
	outputData.sort(advsSortCityLabelAscendingHandler);
	return outputData;
}

// extends array objects with an copy() function
Array.prototype.copy = function() 
{
	return this.slice(0, this.length);
}

function isNumeric(strString)
{
	var strValidChars = "0123456789";
	var strChar;
	var blnResult = true;
	
	if (strString.length == 0) {
		return false;
	}
	
	//  test strString consists of valid characters listed above
	for (i = 0; i < strString.length && blnResult == true; i++) {
		strChar = strString.charAt(i);
		if (strValidChars.indexOf(strChar) == -1) {
			blnResult = false;
		}
	}
	return blnResult;
}



function var_dump(obj)
{
	if (typeof obj == "object") {
		return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "")+"\nValue: " + obj;
	} else {
		return "Type: "+typeof(obj)+"\nValue: "+obj;
	}
}



function advsSortCityLabelAscendingHandler(thisObject,thatObject) 
{
	if (thisObject.label > thatObject.label) {
		return 1;
	} else if (thisObject.label < thatObject.label) {
		return -1;
	}
	return 0;
}



function advsDisplayDistrictSelectBox(data, limit)
{
	var advs_result_cnt = 0;
	var html = '';
	
	//$('div#advsResultOffers').empty();

	//$('#zimmer_min, #zimmer_max').hide();//bgiframe funktioniert hier leider nicht, weil die Länge nicht korrekt bestimmt wird $('#advsResultOffers').bgiframe(); // {top: -30, left: -40, height: 1000, width: 1000, opacity: false}

	if (data.length>0) {
		if (data.length >= limit) {
			$('#advsResultActionsShowAll').show();
		} else {
			$('#advsResultActionsShowAll').hide();
		}
		if (limit == 0 || data.length < limit) {
			limit = data.length;
		}
		html += '<ul id="searchResult">';
		for (i=0; i < limit; i++) {
			advs_result_cnt = (advs_result_cnt + parseInt(data[i].results));
			html += '<li><input class="advsCk" name="advsCk[]" id="advsCk_'+ data[i].type +'_'+ data[i].id +'" type="checkbox" value="'+ data[i].type +'_'+ data[i].id +'"/><p>'+ data[i].label +'</p><p class="sCnt">('+ data[i].results +' Angebote)</p></li>';
		}
		html += '</ul>';
		//html = '<div class="padding_top_0px"><div class="float_right">('+advs_result_cnt+' Angebote)</div></div>' + html;
		$('div#advsResultOffers').html(html);
	}
}



function advsSubmitSelectionHandler(sSearchAgentSelectedCity)
{
	// strasse loeschen
	$('#advstr_sresult').val('');
	$('#street').val('');
	
	//Weil bgiframe nicht funktioniert...
	//$('#zimmer_min, #zimmer_max').show();
	
	advs_sresult= {};
	var iter	= 0;
	var label 	= '';
	var bAtLeastOneSelected = false;
	$('div#advsResultOffers').find('li').each( function (index) {
		chk = $(this).find('.advsCk');
		if (chk.attr('checked') == true ) {
			tmpLabel = $(this).find('p').html();
			if (isNumeric(tmpLabel)) {
				advs_sresult["4ZI_" + tmpLabel]=1;
			} else {
				advs_sresult[chk.val()]=1;
			}
			label = label+ tmpLabel+' ;';
			bAtLeastOneSelected = true;
		}
	});
	
	$('div#advsResultContainer').addClass('invisible');
	
	if (bAtLeastOneSelected) {
		label = label.substr(0,Math.min(80, label.length-1));
		$('#advSearchText').val(label);
	}
	// Do not go on if user did not select anything
	if (!bAtLeastOneSelected) {
		$('#advSearchText').val(sSearchAgentSelectedCity);
		return $('#advSearchText').val();
	}
	
	// Die Trefferzahl ermitteln und auf der Seite aktualisieren
	$('#advs_sresult').val($.toJSON(advs_sresult));
	$('#searchform').submit();
	return $('#advSearchText').val();
}



function enableRadiusSearch()
{
	if ($('#street').val() != '') {
		$('#radiusClickLayer').hide();
		$('#radius').removeAttr("disabled");
		$("#doRadiusSearch").val("true");
		$('#radius').css("background-color","#FFFFFF");
	}
}



function disableRadiusSearch()
{
	if ($('#advstr_sresult').val() == '') {
		$('#radius').css("background-color","#E5E6E7");
		$('#radiusClickLayer').show();
		$('#radius').val('');
		$('#radius').attr("disabled", "disabled");
		$("#doRadiusSearch").val("false");
	}
}


