(function($, undefined){
		
	var requestCounter = 0;
	var kitchenContentList = null;
	var kitchenSuggestForm = null;
	var kitchenFilterObj = null;
	var updateFinishedCallback = new Array();

	$.fn.kitchenUpdateCallback = function( data ){
		if($.isFunction(data)){
			updateFinishedCallback.push(data);
		}else if(data == undefined){
			for(var i=0;i<updateFinishedCallback.length;i++){
				updateFinishedCallback[i].call();
			}
		}
	};
	
	$.fn.kitchenFilterRefresh = function(){
		$.ajax({
				url:"/templates/jquery/kitchen.filter.php",
				data:kitchenSearchQuery,
				dataType:"json",
				success:function(res){
					$(kitchenFilterObj).replaceWith(kitchenFilterObj = $(res.html));
				}
		});
	};

	$.fn.kitchenfilter = function(){
		kitchenFilterObj = this;
	};

	$.fn.kitchenmemolist = function(newHTMLContent){
		kitchenMemoContentList = this;
		if(newHTMLContent != undefined ){
			$("ul",this).html( newHTMLContent );
			assignPopinLoader();
			if($("ul li",	kitchenMemoContentList).length==0){
				$(".memobox-entries",	kitchenMemoContentList).hide();
				$(".memobox-noentries",	kitchenMemoContentList).show();
			}else{
				$(".memobox-entries",	kitchenMemoContentList).show();
				$(".memobox-noentries",	kitchenMemoContentList).hide();
			}
		}
		$("li a.memo-remove",this).unbind("click");
		$("li a.memo-remove",this).click(function(){
			var curElementToRemove = this;
			$.ajax({
					url:"/templates/jquery/kitchen.memolist.php",
					data:{r:requestCounter++,noHTML:"1",action:'removeFromNoticeList',href:$(curElementToRemove).attr("href")},
					dataType:"json",
					success:function(){
						var kitchenid = $(curElementToRemove).attr("href").replace(/.*?(kitchen_id|removeFromNoticeList)\/([0-9]+).*?$/gi,'$2');
						$(".dynamicKitchenList .resultList li a.resultListImageDel").each(function(idx,e){
							if( $(e).attr("href").indexOf("kitchen_id/" + kitchenid + "/")>0 && ($(e).attr("href").indexOf("removeFromNoticeList")>0 || $(e).attr("href").indexOf("addToNoticeList")>0) ){
								$(e).removeClass("resultListImageDel");
								$(e).addClass("resultListImageAdd");
								$(e).find('.memoLinkText').html($('#resultAddToMemoText').html());
								$(e).click();
							}
						});
						$(curElementToRemove).parents("li").remove();
						if($("ul li",	kitchenMemoContentList).length==0){
							$(".memobox-entries",	kitchenMemoContentList).hide();
							$(".memobox-noentries",	kitchenMemoContentList).show();
						}else{
							$(".memobox-entries",	kitchenMemoContentList).show();
							$(".memobox-noentries",	kitchenMemoContentList).hide();
						}
					}
			});
			return false;
		});
	};

	$.fn.kitchenloader = function(searchParams, clear, caller){
		kitchenContentList = this;
		var clearOnNextRequest = false;
		var getParams = {};
		var kitchenList = $("ul.resultList",this);
		var kitchenListParent = kitchenList.parent();
		var kitchenListLi = $("li",kitchenList);
		var kitchenListLiLength = kitchenListLi.length;
		var kitchenListGoogleAdsLength = $("li.goggleAd",kitchenList).length;
		var kitchenListreloadInProgress = $(".reloadinprocess",kitchenListParent);
		var kitchenListreloadNextResults = $(".reloadNextResults",kitchenListParent);
		
		var offset = kitchenListLiLength - kitchenListGoogleAdsLength;
		var limit = kitchenListLiLength - kitchenListGoogleAdsLength;
		var autoRefreshEnabled	= false;
		var refreshDelay		= 500;
		var callRequestLater	= false;

		removeReloadTrigger();

		function removeFromMemoClick(){
			var link = this;
			var linktext = $('#resultAddToMemoText').html();
			$.ajax({
					url:"/templates/jquery/kitchen.memolist.php",
					data:{r:requestCounter++,action:'removeFromNoticeList',href:$(link).attr("href")},
					dataType:"json",
					success:function(res){
						if(res.success == true){
							$(link).removeClass("resultListImageDel");
							$(link).addClass("resultListImageAdd");
							$(link).find('.memoLinkText').html(linktext);
							assignMemoClickhandler();
							$('.kitchenMemoList').kitchenmemolist(res.html);
						}
					}
			});
			return false;
		}
		function addToMemoClick(){
			var link = this;
			var linktext = $('#resultDelFromMemoText').html();
			$.ajax({
					url:"/templates/jquery/kitchen.memolist.php",
					data:{r:requestCounter++,action:'addToNoticeList',href:$(link).attr("href")},
					dataType:"json",
					success:function(res){
						if(res.success == true){
							$(link).removeClass("resultListImageAdd");
							$(link).addClass("resultListImageDel");
							$(link).find('.memoLinkText').html(linktext);
							assignMemoClickhandler();
							$('.kitchenMemoList').kitchenmemolist(res.html);
						}
					}
			});
			return false;
		}

		function assignMemoClickhandler(){
			var tempKitchenRemoveLinks = $("li a.resultListImageDel",kitchenList);
			tempKitchenRemoveLinks.unbind("click");
			tempKitchenRemoveLinks.click(removeFromMemoClick);
			
			var tempKitchenAddMemoLinks = $("li a.resultListImageAdd",kitchenList);
			tempKitchenAddMemoLinks.unbind("click");
			tempKitchenAddMemoLinks.click(addToMemoClick);
		}

		if(caller){
			$(caller).parent(".selectionGroup").children("a").removeClass("selected");
			$(caller).addClass("selected");
		}

		if(searchParams){
			getParams = searchParams;
			if(searchParams.clear == true || clear == true){
				clearOnNextRequest = true;
				getParams.start = offset = 0;
			}
			if(getParams.limit>0){limit = getParams.limit;}
			if(getParams.offset>0){offset = getParams.offset;}
			if(getParams.start>0){offset = getParams.start;}
		}
		
		function fetchListItemsByFilter(){
			$.fn.kitchenFilterRefresh();
			$.getJSON("/templates/jquery/kitchen.contentloader.php",getParams,function(resultData){
				if(clearOnNextRequest){
					clearOnNextRequest = false;
					$(kitchenList).html("");
				}
				kitchenListreloadInProgress.hide();
				getParams.start += offset;
				if( resultData.resultCount > 0 ){
					getParams.start = offset += resultData.resultCount;
					var $item = $(resultData.html);
					if( resultData.resultCount >= limit){
						var curItemLength = $item.length;
						//kitchenList.append($item.hide().fadeIn(700,function(){if(--curItemLength==0)addReloadTrigger()}));
						kitchenList.append($item);
						kitchenList.append($('<li class="resultListElement goggleAd"><iframe height="60" marginheight="0" marginwidth="0" frameborder="0" width="468" src="/templates/snippets/kitchen.list.adwords.php" scrolling="no"></iframe></li>'));
						assignMemoClickhandler();
						if(autoRefreshEnabled){
							addReloadTrigger();
						}else{
							kitchenListreloadNextResults.css('display','block');
						}
					}else{
						//kitchenList.append($item.hide().fadeIn(700));
						kitchenList.append($item);
						assignMemoClickhandler();
						offset = 0;
						kitchenListreloadNextResults.hide();
					}
					$.fn.kitchenUpdateCallback();
				}else{
					offset = 0;
					kitchenListreloadNextResults.hide();
				}
				$(".maxSearchResultCount").html(resultData.resultCountAll);
			});
		}

		function addReloadTrigger(){
			if($(".reloadtrigger",kitchenListParent).length==0){
				//kitchenList.after('<div class="reloadtrigger"></div>');
				if( $("li:last",kitchenList).length == 0 ){
					$(kitchenList).addClass("reloadtrigger");
				}else{
					$("li:last",kitchenList).addClass("reloadtrigger");
				}
			}
			$(".reloadtrigger",kitchenListParent).appear(function(){
				if($(this).hasClass('reloadtrigger')){
					removeReloadTrigger();
					getParams.start = (offset);
					getParams.limit = (limit);
					kitchenListreloadInProgress.show();
					if(refreshDelay>0){
						if(callRequestLater!=false){
							window.clearTimeout(callRequestLater);
						}
						window.setTimeout(fetchListItemsByFilter, refreshDelay);
					}else{
						fetchListItemsByFilter();
					}
				}
			});
		}

		function removeReloadTrigger(){
			$(".reloadtrigger",kitchenListParent).removeClass("reloadtrigger");
		}

		kitchenListreloadNextResults.hide();
		kitchenListreloadNextResults.unbind("click");
		kitchenListreloadNextResults.click(function(){
			kitchenListreloadInProgress.show();
			fetchListItemsByFilter();
			return false;
		});
		
		$(".dynamicPager",kitchenListParent).hide();
		kitchenListreloadInProgress.hide();
		if(searchParams.clear == true || clear == true){
			kitchenListreloadInProgress.show();
			fetchListItemsByFilter();
		}else{
			if(autoRefreshEnabled){
				addReloadTrigger(this);
			}else{
				if(offset >= getParams.limit){
					getParams.start = offset;
					kitchenListreloadNextResults.css('display','block');
				}
			}
		}
		assignMemoClickhandler();
	};

	$.fn.kitchensuggest = function(chainedLoader){
		kitchenSuggestForm = this;
		var self = this;
		var chained = chainedLoader;
		var callRequestLater = false;
		var suggestDelay = 200;

		function refreshPriceRange(){
			$.ajax({
					url:"/templates/jquery/kitchen.suggestloader.php",
					data:kitchenSearchQuery,
					dataType:"json",
					success:function(res){
						if(res.minPrice!=res.maxPrice || parseFloat($(".rangeMin",self).val())>parseFloat(res.minPrice) ){
							$(".rangeMin",self).val(res.minPrice);
						}
						if(res.minPrice!=res.maxPrice || parseFloat($(".rangeMax",self).val())<parseFloat(res.maxPrice) ){
							$(".rangeMax",self).val(res.maxPrice);
						}
						initRangeSlider();
					}
			});
		}

		function initRangeSlider(){
			/* price range selector */
			//$(".rangeInputMin",self).hide();
			//$(".rangeInputMax",self).hide();
			if( isNaN(parseFloat($(".rangeInputMin",self).val())) ){
				$(".rangeInputMin",self).val(parseFloat($(".rangeMin",self).val()));
			}
			if( isNaN(parseFloat($(".rangeInputMax",self).val())) ){
				$(".rangeInputMax",self).val(parseFloat($(".rangeMax",self).val()));
			}

			$(".rangeSlider",self).slider({
				range: true,
				min:parseFloat($(".rangeMin",self).val()),
				max:parseFloat($(".rangeMax",self).val()),
				values:[parseFloat($(".rangeInputMin",self).val()),parseFloat($(".rangeInputMax",self).val())],
				slide:function( event, ui ){
					if( kitchenSearchQuery ){
						kitchenSearchQuery.minprice = ui.values[ 0 ];
						kitchenSearchQuery.maxprice = ui.values[ 1 ];
						if(callRequestLater!=false){
							window.clearTimeout(callRequestLater);
						}
						callRequestLater = window.setTimeout(callDelayedRequest, suggestDelay);
					}
					$(".rangeInputMin",$(self).parent()).val( ui.values[ 0 ] );
					$(".rangeInputMax",$(self).parent()).val( ui.values[ 1 ] );
				}
			});
		}

		function callDelayedRequest(){
			var dat = {};
			$.extend(dat,kitchenSearchQuery);
			dat.start = 0;
			chainedLoader.kitchenloader(dat, true);
			refreshPriceRange();
		}

		$("form",self).submit(function(){callDelayedRequest();return false;})
		$("input[type=submit]",self).hide();
		$.each($("input[type=checkbox]",this),function(i,elem){
			$(elem).change( function() {
				if($(this).attr("checked") == true) kitchenSearchQuery[$(this).attr("name")] = $(this).val();
				else kitchenSearchQuery[$(this).attr("name")] = '';
				if(callRequestLater!=false){
					window.clearTimeout(callRequestLater);
				}
				callRequestLater = window.setTimeout(callDelayedRequest, suggestDelay);
			});
		});
		$.each($("select",this),function(i,elem){
			$(elem).hide();
			var inp = $("<input/>");
			var ddopen = $('<a class="ui-dropdown-open" href="#"></a>');
			$(ddopen).click(function(){
				$(ddopen).prev('input').autocomplete( "search", $(ddopen).prev('input').val() );
				$(ddopen).prev('input').focus();
				return false;
			});

			$(inp).val($(elem).val());
			$(inp).attr("name",$(elem).attr("name"));
			$(inp).attr("class",$(elem).attr("class"));
			$(inp).attr("id",$(elem).attr("id"));
			$(inp).attr("tabindex",$(elem).attr("tabindex"));
			$(inp).insertAfter(ddopen);
			$(inp).autocomplete({
				source:function(c,f){
					c.field = $(elem).attr("name");
					$.extend(c,kitchenSearchQuery);
					refreshPriceRange();
					$.ajax({
							url:"/templates/jquery/kitchen.suggestloader.php",
							data:c,
							dataType:"json",
							success:function(h){f(h)}
					});
				},
				minLength:0,
				select:function( event, ui ) {
					if($(this).val()==''){
						kitchenSearchQuery[$(this).attr("name")] = '';
						if(ui.item.value != ''){
							kitchenSearchQuery[$(this).attr("name")] = ui.item.value;
						}
					}else{
						kitchenSearchQuery[$(this).attr("name")] = ui.item.value;
					}
					if(callRequestLater!=false){
						window.clearTimeout(callRequestLater);
					}
					callRequestLater = window.setTimeout(callDelayedRequest, suggestDelay);
				}
			});
			$(inp).change(function(){
				kitchenSearchQuery[$(this).attr("name")] = $(this).val();
				if(callRequestLater!=false){
					window.clearTimeout(callRequestLater);
				}
				callRequestLater = window.setTimeout(callDelayedRequest, suggestDelay);
			});
			$(inp).insertAfter($(elem));
			$(ddopen).insertAfter($(inp));
			$(elem).remove();
		});

		initRangeSlider();
	};
})(jQuery);
