var Catalog = function()
{
//privat
	var currentVarietalChar = '2';
	var varietals = Array();
	var selectedVarietals = Array();
	var currentWineryChar = '(';
	var wineries = Array();
	var selectedWineries = Array();

	var typesHeader = "#typesHeader";
	var typesList = "#typesList";
	var varietalDialogueContainer = "#varietalDialogueContainer";
	var varietalContainer = "#varietalContainer";
	var regionDialogueContainer = "#regionDialogueContainer";
	var regionContainer = "#regionContainer";
	var tagsHeader = "#tagsHeader";
	var tagsList = "#tagsList";
	var wineryDialogueContainer = "#wineryDialogueContainer";
	var wineryContainer = "#wineryContainer";
	var occasionsHeader = "#occasionsHeader";
	var occasionsList = "#occasionsList";
	var recipientsHeader = "#recipientsHeader";
	var recipientsList = "#recipientsList";
	var nmordesc = "#nmordesc";
	var allHeader = "#allHeader";
	var allDiv = "#allDiv";
	var tastingKeyDialogueContainer = "#dialogueContainer";
	var wineFields = "#wineFields";
	var shade = "#shade";

	var StopPropagation = function(e)
	{
		e.stopPropagation();
	};

	var SetTypeClick = function()
	{
		var div = $(this);
		div.click(ChangeSelectedType);

		if( ! $.browser.msie ) div.find("label").click(StopPropagation);
	};

	var ChangeSelectedType = function()
	{
		var ul = $(this).next();
		if (ul.length > 0)
		{
			if (ul.is(":visible"))
			{
				ul.hide();
				ul.find(".listItem").removeClass("selected")
				ul.find("input").removeAttr("checked");
			}
			else
			{
				ul.show();
			}
		}
		jQuery(this).toggleClass("selected");
	};

	var SetTagClick = function()
	{
		var div = jQuery(this);
		div.click(ChangeSelectedTag);
		div.find("label").click(StopPropagation);
	};

	var ChangeSelectedTag = function()
	{
		jQuery(this).toggleClass("selected");
	};

	var SetOccasionClick = function()
	{
		var div = jQuery(this);
		div.click(ChangeSelectedOccasion);
		div.find("label").click(StopPropagation);
	};

	var ChangeSelectedOccasion = function()
	{
		jQuery(this).toggleClass("selected");
	};

	var SetRecipientClick = function()
	{
		var div = jQuery(this);
		div.click(ChangeSelectedRecipient);
		div.find("label").click(StopPropagation);
	};

	var ChangeSelectedRecipient = function()
	{
		jQuery(this).toggleClass("selected");
	};

	var ShowTypes = function()
	{
		if (typesList.is(":visible"))
			typesList.hide();
		else
			typesList.show();
	};

	var ShowTags = function()
	{
		if (tagsList.is(":visible"))
			tagsList.hide();
		else
			tagsList.show();
	};

	var ShowOccasions = function()
	{
		if (occasionsList.is(":visible"))
			occasionsList.hide();
		else
			occasionsList.show();
	};

	var ShowRecipients = function()
	{
		if (recipientsList.is(":visible"))
			recipientsList.hide();
		else
			recipientsList.show();
	};

	var ShowNmOrDesc = function()
	{
		var nmordesc = $('#nmordesc').next();
		if (nmordesc.is(":visible"))
			nmordesc.hide();
		else
		nmordesc.show();
	};

	var ShowAllHeader = function()
	{
		if (allDiv.is(":visible"))
			allDiv.hide();
		else
			allDiv.show();
	};

	var GetVarietalCallback = function(response, status)
	{
		if (response.status = "OK")
		{
			if (response.data == null)
				varietals[this.char] = Array();
			else
				varietals[this.char] = response.data;
			Catalog.ShowVarietal();
		}
	};

	var GetRegionCallback = function(response, status)
	{
		if (response.status = "OK")
		{
			if (response.data == null)
				regions[this.char] = Array();
			else
				regions[this.char] = response.data;
			Catalog.ShowRegion();
		}
	};

	var GetWineryCallback = function(response, status)
	{
		if (response.status = "OK")
		{
			if (response.data == null)
				wineries[this.char] = Array();
			else
				wineries[this.char] = response.data;
			Catalog.ShowWinery();
		}
	};

//public
return {
	Initialize: function()
	{
		selectedVarietals = initSelectedVarietals;
		selectedWineries = initSelectedWineries;

		typesHeader = jQuery(typesHeader);
		typesHeader.click(ShowTypes);
		typesList = jQuery(typesList);
		typesList.find(".listItem").each(SetTypeClick);
		varietalDialogueContainer = jQuery(varietalDialogueContainer);
		varietalContainer = jQuery(varietalContainer);
		regionDialogueContainer = jQuery(regionDialogueContainer);
		regionContainer = jQuery(regionContainer);
		tagsHeader = jQuery(tagsHeader);
		tagsHeader.click(ShowTags);
		tagsList = jQuery(tagsList);
		tagsList.find(".listItem").each(SetTypeClick);
		wineryDialogueContainer = jQuery(wineryDialogueContainer);
		wineryContainer = jQuery(wineryContainer);
		occasionsHeader = jQuery(occasionsHeader);
		occasionsHeader.click(ShowOccasions);
		occasionsList = jQuery(occasionsList);
		occasionsList.find(".listItem").each(SetTypeClick);
		recipientsHeader = jQuery(recipientsHeader);
		recipientsHeader.click(ShowRecipients);
		recipientsList = jQuery(recipientsList);
		recipientsList.find(".listItem").each(SetTypeClick);
		nmordesc = jQuery(nmordesc);
		nmordesc.click(ShowNmOrDesc);
		allHeader = jQuery(allHeader);
		allHeader.click(ShowAllHeader);
		allDiv = jQuery(allDiv);
		tastingKeyDialogueContainer = jQuery(tastingKeyDialogueContainer);
		wineFields = jQuery(wineFields);
		shade = jQuery(shade);
	},

	ShowVarietal: function(char)
	{
		if (char != undefined)
			currentVarietalChar = char;
		if (varietals[currentVarietalChar] == undefined)
		{
			varietals[currentVarietalChar] = "load";
			jQuery.ajax(
				{
					url: "/catalog/ajax/varietal",
					type: "post",
					data: "&char=" + currentVarietalChar,
					dataType: "json",
					char: currentVarietalChar,
					success: GetVarietalCallback
				});
		}
		else
		{
			if (varietals[currentVarietalChar] != "load")
			{
				varietalContainer.empty();
				for (var i in varietals[currentVarietalChar])
					varietalContainer.append("<div style=\"cursor: pointer;\"><input id=\"varietal_" + varietals[currentVarietalChar][i].id + "\" type=\"checkbox\" value=\"" + varietals[currentVarietalChar][i].id + "\"" + (selectedVarietals[varietals[currentVarietalChar][i].id] == undefined ? "" : "checked=\"checked\"") + " onchange=\"Catalog.ChangeVarietal(this);\" /><label for=\"varietal_" + varietals[currentVarietalChar][i].id + "\">" + varietals[currentVarietalChar][i].name + "</label></div>");
				varietalDialogueContainer.show();
				shade.show();
			}
		}
	},

	ChangeVarietal: function(varietal)
	{
		if (varietal.checked)
			selectedVarietals[varietal.value] = varietal.value;
		else
			delete selectedVarietals[varietal.value];
	},

	HideVarietal: function()
	{
		varietalDialogueContainer.hide();
		shade.hide();
	},
	ShowRegion: function(char)	
	{
		if (char != undefined)
			currentRegionChar = char;
		if (regions[currentRegionChar] == undefined)	
			{
			regions[currentRegionChar] = "load";
			jQuery.ajax(
				{
				url: "/catalog/ajax/region",
				type: "post",
				data: "&char=" + currentRegionChar,
				dataType: "json",
				char: currentRegionChar,
				success: GetRegionCallback
				});
				}
		else
			{
			if (regions[currentRegionChar] != "load")
				{
				regionContainer.empty();
				for (var i in regions[currentRegionChar])
					regionContainer.append("<div style=\"cursor: pointer;\"><input id=\"region_" + regions[currentRegionChar][i].id + "\" type=\"checkbox\" value=\"" + regions[currentRegionChar][i].id + "\"" + (selectedRegions[regions[currentRegionChar][i].id] == undefined ? "" : "checked=\"checked\"") + " onchange=\"Catalog.ChangeRegion(this);\" /><label for=\"region_" + regions[currentRegionChar][i].id + "\">" + regions[currentRegionChar][i].name + "</label></div>");			
				    regionDialogueContainer.show();
					shade.show();
					}
					}
					},
	
	ChangeRegion: function(region)
	{
	  if (region.checked)
		  selectedRegions[region.value] = region.value;
	  else
		  delete selectedRegions[region.value];	
	  },
		  
   HideRegion: function()
	   {
	   regionDialogueContainer.hide();
	   shade.hide();	
	   },

	/*ShowRegion: function()
	{
		regionDialogueContainer.show();
		shade.show();
	},

	ScrollToRegion: function(char)
	{
		char = jQuery("#region_char_" + char)[0];
		regionContainer[0].scrollTop = char.offsetTop - char.scrollHeight - 31;
	},

	HideRegion: function()
	{
		regionDialogueContainer.hide();
		shade.hide();
	},
*/
	ShowWinery: function(char)
	{
		if (char != undefined)
			currentWineryChar = (char == "+" ? "plus" : char);
		if (wineries[currentWineryChar] == undefined)
		{
			wineries[currentWineryChar] = "load";
			jQuery.ajax(
				{
					url: "/catalog/ajax/winery",
					type: "post",
					data: "&char=" + currentWineryChar,
					dataType: "json",
					char: currentWineryChar,
					success: GetWineryCallback
				});
		}
		else
		{
			if (wineries[currentWineryChar] != "load")
			{
				wineryContainer.empty();
				for (var i in wineries[currentWineryChar])
					wineryContainer.append("<div style=\"cursor: pointer;\"><input id=\"winery_" + wineries[currentWineryChar][i].id + "\" type=\"checkbox\" value=\"" + wineries[currentWineryChar][i].id + "\"" + (selectedWineries[wineries[currentWineryChar][i].id] == undefined ? "" : "checked=\"checked\"") + " onchange=\"Catalog.ChangeWinery(this);\" /><label for=\"winery_" + wineries[currentWineryChar][i].id + "\">" + wineries[currentWineryChar][i].name + "</label></div>");
				wineryDialogueContainer.show();
				shade.show();
			}
		}
	},

	ChangeWinery: function(winery)
	{
		if (winery.checked)
			selectedWineries[winery.value] = winery.value;
		else
			delete selectedWineries[winery.value];
	},

	HideWinery: function()
	{
		wineryDialogueContainer.hide();
		shade.hide();
	},

	SetFilter: function()
	{        
		var pricemin = Number(jQuery("#minPrice option:selected").val());
		var pricemax = jQuery("#maxPrice option:selected").val();
		if ((pricemax != "150=") && (pricemin >= Number(pricemax)))
		{
			alert("Min prace must be smaller then max");
			return;
		}

		var pack = jQuery("#singlesPacks input:checked").val();

		var url = "/wines/refine-search/args/pack-" + pack + "/item-" + jQuery("#inStock input:checked").val() + "/pricemin-" + pricemin + "/pricemax-" + pricemax;

		var bonly = $("#bonly").attr("checked"); // flag bottlenotes product only
        if(bonly==true){
            url +="/bonly-yes";
        }
        
        if (pack != "packs")
		{
			var types = typesList.find("div.selected > input");

			types.each(function() {				url += "/" + $(this).attr("kind")+ "-" + $(this).val();			});

			if (selectedVarietals.length > 0 )
			{
				url += "/varietal-"
				for (var i in selectedVarietals)
					url += "[" + i + "]";
			}
			var regions = regionContainer.find("input:checked");
			if (regions.length > 0 )
			{
				url += "/region-"
				for (var i = 0; i < regions.length; i++)
					url += "[" + regions[i].value + "]";
			}

			var tags = tagsList.find("input:checked");
			if (tags.length > 0 )
				for (var i = 0; i < tags.length; i++)
					url += "/tag-" + tags[i].value;

			if (selectedWineries.length > 0 )
			{
				url += "/winery-"
				for (var i in selectedWineries)
					url += "[" + i + "]";
			}
		}

		if (pack != "singles")
		{
			var occasions = occasionsList.find("input:checked");
			if (occasions.length > 0 )
				for (var i = 0; i < occasions.length; i++)
					url += "/occasion-" + occasions[i].value;

			var recipients = recipientsList.find("input:checked");
			if (recipients.length > 0 )
				for (var i = 0; i < recipients.length; i++)
					url += "/recipient-" + recipients[i].value;
		}

		window.location = url;
	},

	ClearFilter: function()
	{
		var pack = jQuery("#singlesPacks input");
		pack[pack.length - 1].checked = true;
		var stock = jQuery("#inStock input");
		stock[stock.length - 1].checked = true;
		jQuery("#minPrice")[0].selectedIndex = 0;
		jQuery("#maxPrice")[0].selectedIndex = jQuery("#maxPrice option").length - 1;
		typesList.find("input").removeAttr("checked");
		typesList.find(".listItem").removeClass("selected");
		tagsList.find("input").removeAttr("checked");
		tagsList.find(".listItem").removeClass("selected");
		occasionsList.find("input").removeAttr("checked");
		occasionsList.find(".listItem").removeClass("selected");
		recipientsList.find("input").removeAttr("checked");
		selectedVarietals = Array();
		varietalContainer.find("input").removeAttr("checked");
		regionContainer.find("input").removeAttr("checked");
		selectedWineries = Array();
		wineryContainer.find("input").removeAttr("checked");
		jQuery("#nmordesc").next().find("input").val("");
		allDiv.find("input").val("");
	},

	ChageBottlenotesOnly: function(a){ // AJAX function. Reload page on click
        var url = window.location.href;
     
//        var bonly = $(a).attr("checked"); // flag bottlenotes product only
        if(a==true){
            var surl = /bonly-yes/g;
            if(surl.test(url)) {
               url = url.replace("bonly-yes", "bonly-no");
            } else {
                var surl = /bonly-no/g;
                if(surl.test(url)) {
                    url = url.replace("bonly-no", "bonly-yes");
                } else {
                    url +="/bonly-yes";
                }
            }
        } 
        window.location = url; 
	},
    
    ChageSortType: function(select)
	{
	    if( select.options[select.selectedIndex].value == "bonly" ){
	      this.ChageBottlenotesOnly(true); 
	    } else {
		  window.location = select.options[select.selectedIndex].value;
        }
	},

	ShowTastingKey: function(char)
	{
		tastingKeyDialogueContainer.show();
		shade.show();
	},

	HideTastingKey: function()
	{
		tastingKeyDialogueContainer.hide();
		shade.hide();
	},

	ChangePacks: function(pack)
	{
		switch (pack.value)
		{
			case "packs":
				wineFields.hide();
				break;
			default:
				wineFields.show();
		}
	}
};
}();

function SetFilterOld()
{
var url = window.location.href;
url = url.replace(/\/pack-[A-Za-z\-]+/g, "");
url = url + (url.charAt(url.length - 1) == "/" ? "" : "/") + "pack-" + jQuery("#singlesPacks input:checked").val();
url = url.replace(/\/item-[A-Za-z\-]+/g, "");
url = url + "/item-" + jQuery("#inStock input:checked").val();
url = url.replace(/\/pricemin-[\d]+/g, "");
var pricemin = Number(jQuery("#minPrice option:selected").val());
var pricemax = jQuery("#maxPrice option:selected").val();
if ((pricemax != "150=") && (pricemin >= Number(pricemax)))
{
alert("Min prace must be smaller then max");
return;
}
url = url + "/pricemin-" + pricemin;
url = url.replace(/\/pricemax-[\d+]+/g, "");
url = url + "/pricemax-" + pricemax;
url = url.replace(/\/page-[\d]+/g, "");
window.location = url;
}
