function AdjustProducts()
{
	if (IsProductsOpen())
	{
		var currentHeight = GetProductsCurrentHeight();
		var newHeight = GetProductsNewHeight();

		if (currentHeight != newHeight && currentHeight - 1 != newHeight)
		{
			var anim = new YAHOO.util.Anim("products", {height: {from: currentHeight, to: newHeight}}, 1, YAHOO.util.Easing.easeIn);
			anim.animate();
		}
	}
}


function CloseProducts()
{
	YAHOO.util.Dom.removeClass("productToggleLink", "selected");

	var anim = new YAHOO.util.Anim("products", {height: {from: GetProductsCurrentHeight(), to: 0}}, 1, YAHOO.util.Easing.easeIn);
	anim.onComplete.subscribe(HideProducts);
	anim.animate();

	var aform = YAHOO.util.Dom.get("memberSearchForm");
	aform.productsOpen.value = false;
}


function CloseMarkets()
{
	var anim = new YAHOO.util.Anim("markets", {height: {from: GetMarketsCurrentHeight(), to: 0}}, 1, YAHOO.util.Easing.easeIn);
	anim.onComplete.subscribe(HideMarkets);
	anim.animate();
}


function DisableProducts()
{
	YAHOO.util.Dom.addClass("productToggleLink", "disabled");
	YAHOO.util.Event.removeListener("productToggleLink", "click");

	var products = YAHOO.util.Dom.get("products");

	if (IsProductsOpen())
	{
		CloseProducts();
	}


	if (IsMarketsOpen())
	{
		CloseMarkets();
	}
}


function EnableProducts()
{
	YAHOO.util.Dom.removeClass("productToggleLink", "disabled");

	var listeners = YAHOO.util.Event.getListeners("productToggleLink", "click");

	if (listeners == null)
	{
		YAHOO.util.Event.addListener("productToggleLink", "click", ToggleProducts);
	}
}


function GetProducts()
{
	var aform = YAHOO.util.Dom.get("memberSearchForm");
	var memberTypeIDList = "";


	for (var i = 0; i < aform.memberTypeID.length; i++)
	{
		if (aform.memberTypeID[i].checked)
		{
			if (memberTypeIDList.length > 0)
			{
				memberTypeIDList += ",";
			}

			memberTypeIDList += aform.memberTypeID[i].value;
		}
	}


	if (memberTypeIDList.length > 0)
	{
		var packetObject = new Object();
		packetObject.factoryObjectName = "members";
		packetObject.methodName = "GetProductsByMemberType";
		packetObject.argumentsArray = new Array();
		
		var argument = new Object();
		argument.name = "memberTypeIDList";
		argument.value = memberTypeIDList;

		packetObject.argumentsArray.push(argument);
	

		argument = new Object();
		argument.aform = aform;
		argument.selectedProducts = new Object();


		if (aform.productID)
		{
			for (var i = 0; i < aform.productID.length; i++)
			{
				if (aform.productID[i].checked)
				{
					argument.selectedProducts[aform.productID[i].value] = aform.productID[i].value;
				}
			}
		}


		var JSONPacket = YAHOO.lang.JSON.stringify(packetObject);
		var postData = "method=ProcessRequest&JSONPacket=" + JSONPacket + "&returnFormat=JSON";
		var url = "/cfcs/pciiw/proxy.cfc";


		var callback = 
		{
			success: function(response)
			{
				var products = new Query();
				products.LoadJSONQuery(YAHOO.lang.JSON.parse(response.responseText));
				var aform = response.argument;
	
	
				LoadProducts(aform, products);
	
				// var tmp = window.open();
				// tmp.document.write(response.responseText);
			},
			
			failure: function()
			{
				alert("Failed to retrieve products.");
			},
	
			argument: argument,
			cache: false
		};
	
		YAHOO.util.Connect.asyncRequest('POST', url, callback, postData);
	}
}


function GetProductsCurrentHeight()
{
	var products = YAHOO.util.Dom.get("products");
	
	return products.offsetHeight;
}


function GetProductsNewHeight()
{
	var productsContainer = YAHOO.util.Dom.get("productsContainer");
	
	return productsContainer.offsetHeight;
}


function GetMarketsCurrentHeight()
{
	var markets = YAHOO.util.Dom.get("markets");
	
	return markets.markets;
}


function GetMarketsNewHeight()
{
	var marketsContainer = YAHOO.util.Dom.get("marketsContainer");
	
	return marketsContainer.offsetHeight;
}


function HideProducts()
{
	var products = YAHOO.util.Dom.get("products");
	products.style.display = "none";

	var productsList = YAHOO.util.Dom.get("productsList");
	productsList.innerHTML = "";
}


function HideMarkets()
{
	var markets = YAHOO.util.Dom.get("markets");
	markets.style.display = "none";

	var aform = YAHOO.util.Dom.get("memberSearchForm");

	for (var i = 0; i < aform.marketID.length; i++)
	{
		aform.marketID[i].checked = false;
		aform.marketID[i].disabled = true;
	}
}


function IsProducerChecked()
{
	var isProducer = false;
	var aform = YAHOO.util.Dom.get("memberSearchForm");


	for (var i = 0; i < aform.memberTypeID.length; i++)
	{
		if (aform.memberTypeID[i].value == 1 && aform.memberTypeID[i].checked)
		{
			isProducer = true;
			break;
		}
	}

	return isProducer;
}


function IsProductsOpen()
{
	var products = YAHOO.util.Dom.get("products");
	var productsOpen = true;

	if (products.style.display == "none")
	{
		productsOpen = false;
	}

	return productsOpen;
}


function IsMarketsOpen()
{
	var markets = YAHOO.util.Dom.get("markets");
	var marketsOpen = true;

	if (markets.style.display == "none")
	{
		marketsOpen = false;
	}

	return marketsOpen;
}


function LoadProducts(argument, products)
{
	var aform = argument.aform;
	var productsList = YAHOO.util.Dom.get("productsList");
	var clear = document.createElement("div");
	var row = null;

	clear.className = "clear";
	clear.innerHTML = "&nbsp;";

	productsList.innerHTML = "";

	var productDiv = null;
	var input = null;
	var textNode = null;

	productsList.appendChild(clear);

	if (products.RecordCount() > 0)
	{
		for (var i = 0; i < products.RecordCount(); i++)
		{
			row = products.GetRow(i);
	
			productDiv = document.createElement("div");
			productDiv.className = "list-item";
	
			input = document.createElement("input");
			input.className = "checkbox";
			input.type = "checkbox";
			input.name = "productID";
			input.value = row["productid"];

			if (argument.selectedProducts[row["productid"]])
			{
				input.checked = true;
			}

			textNode = document.createTextNode(row["product"]);
	
			productDiv.appendChild(input);
			productDiv.appendChild(textNode);
	
			productsList.appendChild(productDiv);
		}
	}
	else
	{
		productDiv = document.createElement("div");
		productDiv.className = "list-item";

		textNode = document.createTextNode("No products available.");
		productDiv.appendChild(textNode);
		productsList.appendChild(productDiv);
	}

	clear = document.createElement("div");
	clear.className = "clear";
	clear.innerHTML = "&nbsp;";

	productsList.appendChild(clear);


	setTimeout(AdjustProducts, 1);


	if (IsProductsOpen() && !IsMarketsOpen() && IsProducerChecked())
	{
		setTimeout(OpenMarkets, 1);
	}
	else if (IsMarketsOpen() && !IsProducerChecked())
	{
		CloseMarkets();
	}
}


function OpenProducts(override)
{
	var runAnimation = true;

	if (override != null && override == true)
	{
		runAnimation = false;
		ShowProducts(true);
	}
	else
	{
		ShowProducts();
	}

	YAHOO.util.Dom.addClass("productToggleLink", "selected");


	if (runAnimation)
	{
		var anim = new YAHOO.util.Anim("products", {height: {from: 0, to: GetProductsNewHeight()}}, 1, YAHOO.util.Easing.easeIn);
		anim.animate();
	}

	var aform = YAHOO.util.Dom.get("memberSearchForm");
	aform.productsOpen.value = true;


	var productsList = YAHOO.util.Dom.get("productsList");

	if (productsList.innerHTML == "")
	{
		GetProducts();	
	}
}


function OpenMarkets(override)
{
	var runAnimation = true;

	if (override != null && override == true)
	{
		runAnimation = false;
		ShowMarkets(true);
	}
	else
	{
		ShowMarkets();
	}


	if (runAnimation)
	{
		var anim = new YAHOO.util.Anim("markets", {height: {from: 0, to: GetMarketsNewHeight()}}, 1, YAHOO.util.Easing.easeIn);
		anim.animate();
	}

	var aform = YAHOO.util.Dom.get("memberSearchForm");

	for (var i = 0; i < aform.marketID.length; i++)
	{
		aform.marketID[i].disabled = false;
	}
}


function SetupProductsToggleButton()
{
	var aform = YAHOO.util.Dom.get("memberSearchForm");
	var disableProductsButton = true;

	for (var i = 0; i < aform.memberTypeID.length; i++)
	{
		if (aform.memberTypeID[i].checked)
		{
			disableProductsButton = false;
			break;	
		}
	}


	if (disableProductsButton)
	{
		DisableProducts();
	}
	else
	{
		EnableProducts();
	}
}


function ShowProducts(override)
{
	var resetHeight = true;

	if (override != null && override == true)
	{
		resetHeight = false;
	}

	var products = YAHOO.util.Dom.get("products");

	if (resetHeight)
	{
		products.style.height = "0px";
	}

	products.style.display = "block";
}


function ShowMarkets(override)
{
	var resetHeight = true;

	if (override != null && override == true)
	{
		resetHeight = false;
	}

	var markets = YAHOO.util.Dom.get("markets");

	if (resetHeight)
	{
		markets.style.height = "0px";
	}

	markets.style.display = "block";
}


function ToggleProducts(e, productsLink)
{
	if (IsProductsOpen())
	{
		CloseProducts();

		if (IsMarketsOpen())
		{
			CloseMarkets();
		}
	}
	else
	{
		setTimeout(OpenProducts, 1);

		if (!IsMarketsOpen() && IsProducerChecked())
		{
			setTimeout(OpenMarkets, 1);
		}
	}
}


function ValidateForm(aform)
{
	var memberTypeChecked = false;

	for (var i = 0; i < aform.memberTypeID.length; i++)
	{
		if (aform.memberTypeID[i].checked)
		{
			memberTypeChecked = true;
			break;	
		}
	}

	if (!memberTypeChecked)
	{
		alertContainerManager.openAlert("errorAlert", "Missing Field!", "Please select at least one member type to search for.");
		return false;	
	}
}


function _InitMembersSearch()
{
	var aform = YAHOO.util.Dom.get("memberSearchForm");

	// Setup click events on member types
	for (var i = 0; i < aform.memberTypeID.length; i++)
	{
		YAHOO.util.Event.addListener(aform.memberTypeID[i], "click", SetupProductsToggleButton);
		YAHOO.util.Event.addListener(aform.memberTypeID[i], "click", GetProducts);
	}

	SetupProductsToggleButton();

	if (String(aform.productsOpen.value) == "true")
	{
		OpenProducts(true);

		if (!IsMarketsOpen() && IsProducerChecked())
		{
			OpenMarkets(true);
		}
	}
}


YAHOO.util.Event.addListener(window, "load", _InitMembersSearch);