
function saveFilterCriteria()
{
	var manufacturersChecked = getCheckedBoxes("FilterManufacturer_");
	var formFactorsChecked = getCheckedBoxes("FilterFormFactor_");
	var featuresChecked = getCheckedBoxes("FilterFeature_");
	var priceRangesChecked = getCheckedBoxes("FilterPriceRange_");
	var priceTotalRangesChecked = getCheckedBoxes("FilterPriceTotalRange_");

	var manufacturersCheckedCommaSep = "";
	var formFactorsCheckedCommaSep = "";
	var featuresCheckedCommaSep = "";
	var priceRangesCheckedCommaSep = "";
	var priceTotalRangesCheckedCommaSep = "";

	for (var i = 0; i < manufacturersChecked.length; i++)
	{
		manufacturersCheckedCommaSep += manufacturersChecked[i].id + ",";
	}
	if (manufacturersCheckedCommaSep != "")
	{
		manufacturersCheckedCommaSep = manufacturersCheckedCommaSep.substr(0, manufacturersCheckedCommaSep.length -1); //remove last comma
	}
	for (var i = 0; i < formFactorsChecked.length; i++)
	{
		formFactorsCheckedCommaSep += formFactorsChecked[i].id + ",";
	}
	if (formFactorsCheckedCommaSep != "")
	{
		formFactorsCheckedCommaSep = formFactorsCheckedCommaSep.substr(0, formFactorsCheckedCommaSep.length -1); //remove last comma
	}
	for (var i = 0; i < featuresChecked.length; i++)
	{
		featuresCheckedCommaSep += featuresChecked[i].id + ",";
	}
	if (featuresCheckedCommaSep != "")
	{
		featuresCheckedCommaSep = featuresCheckedCommaSep.substr(0, featuresCheckedCommaSep.length -1); //remove last comma
	}
	for (var i = 0; i < priceRangesChecked.length; i++)
	{
		priceRangesCheckedCommaSep += priceRangesChecked[i].id + ",";
	}
	if (priceRangesCheckedCommaSep != "")
	{
		priceRangesCheckedCommaSep = priceRangesCheckedCommaSep.substr(0, priceRangesCheckedCommaSep.length -1); //remove last comma
	}
	for (var i = 0; i < priceTotalRangesChecked.length; i++)
	{
		priceTotalRangesCheckedCommaSep += priceTotalRangesChecked[i].id + ",";
	}
	if (priceTotalRangesCheckedCommaSep != "")
	{
		priceTotalRangesCheckedCommaSep = priceTotalRangesCheckedCommaSep.substr(0, priceTotalRangesCheckedCommaSep.length -1); //remove last comma
	}

	filterCriteriaCookie.put("manufacturers", manufacturersCheckedCommaSep);
	filterCriteriaCookie.put("forms", formFactorsCheckedCommaSep);
	filterCriteriaCookie.put("features", featuresCheckedCommaSep);
	filterCriteriaCookie.put("priceranges", priceRangesCheckedCommaSep);
	filterCriteriaCookie.put("pricetotalranges", priceTotalRangesCheckedCommaSep);

	filterCriteriaCookie.write();
}

function loadFilterCriteria()
{
	if ( ! filterCriteriaCookie.found )
	{
		return;
	}

	prefillFilterCriteria(filterCriteriaCookie.get("manufacturers"));
	prefillFilterCriteria(filterCriteriaCookie.get("forms"));
	prefillFilterCriteria(filterCriteriaCookie.get("features"));
	prefillFilterCriteria(filterCriteriaCookie.get("priceranges"));
	prefillFilterCriteria(filterCriteriaCookie.get("pricetotalranges"));
}

function prefillFilterCriteria(loadedFilterCommaSep)
{
	if (loadedFilterCommaSep != "" && loadedFilterCommaSep != null)
	{
		var loadedFilter = loadedFilterCommaSep.split(",");
		for (var i = 0; i < loadedFilter.length; i++)
		{
			if (document.getElementById(loadedFilter[i]))
			{
				document.getElementById(loadedFilter[i]).checked = true;
			}
		}
	}
}

function getFilteredPhoneList()
{
	var newPhoneList = new mobilePhoneList();
	var showPhone;
	var testPassed_manufacturer;
	var testPassed_feature;
	var testPassed_formFactor;

	//Check all the phones to check if they match the selected filter criteria
	for (var i = 0; i < allPhones.mobilePhones.length; i++)
	{
		showPhone = true;

		//Manufacturer filter
			var manufacturersChecked = getCheckedBoxes("FilterManufacturer_");

			if (manufacturersChecked.length > 0)
			{
				var manufacturerName = null;
				testPassed_manufacturer = false;

				for (var k = 0; k < manufacturersChecked.length; k++)
				{
					manufacturerName = manufacturersChecked[k].id.replace("FilterManufacturer_", "");
					if (allPhones.mobilePhones[i].manufacturer == manufacturerName)
					{
						testPassed_manufacturer = true;
						break;
					}
				}
				if (! testPassed_manufacturer)
				{
					showPhone = false;
				}
			}

		//Feature filter
			var featuresChecked = getCheckedBoxes("FilterFeature_");

			if (featuresChecked.length > 0)
			{
				var featureID = null;
				testPassed_feature = true;

				for (var k = 0; k < featuresChecked.length; k++)
				{
					featureID = featuresChecked[k].id.replace("FilterFeature_", "");
					if (allPhones.mobilePhones[i].featureIDsCommaSeparated.indexOf(featureID) == -1)
					{
						testPassed_feature = false;
						break;
					}
				}
				if (! testPassed_feature)
				{
					showPhone = false;
				}
			}


		//Form filter
			var formFactorsChecked = getCheckedBoxes("FilterFormFactor_");

			if (formFactorsChecked.length > 0)
			{
				var formFactorID = null;
				testPassed_formFactor = false;

				for (var k = 0; k < formFactorsChecked.length; k++)
				{
					formFactorID = formFactorsChecked[k].id.replace("FilterFormFactor_", "");
					if (allPhones.mobilePhones[i].formFactorID == formFactorID)
					{
						testPassed_formFactor = true;
						break;
					}
				}
				if (! testPassed_formFactor )
				{
					showPhone = false;
				}
			}
		
		//Price range
			var priceRangesChecked = getCheckedBoxes("FilterPriceRange_");

			if (priceRangesChecked.length > 0)
			{
				var priceID = null;
				var priceMinimum = null;
				var priceMaximum = null;
				testPassed_priceRange = false;

				for (var k = 0; k < priceRangesChecked.length; k++)
				{
					priceID = priceRangesChecked[k].id.replace("FilterPriceRange_", "");
					priceMinimum = priceID.split("_")[0];
					priceMaximum = priceID.split("_")[1];
					if (priceMaximum == "plus")
					{
						priceMaximum = 100000;
					}

					if (parseInt(allPhones.mobilePhones[i].price) >= parseInt(priceMinimum) && parseInt(allPhones.mobilePhones[i].price) <= parseInt(priceMaximum))
					{
						testPassed_priceRange = true;
						break;
					}
				}
				if (! testPassed_priceRange )
				{
					showPhone = false;
				}
			}

		//Price total range
			var priceTotalRangesChecked = getCheckedBoxes("FilterPriceTotalRange_");

			if (priceTotalRangesChecked.length > 0)
			{
				var priceTotalID = null;
				var priceTotalMinimum = null;
				var priceTotalMaximum = null;
				testPassed_priceTotalRange = false;

				for (var k = 0; k < priceTotalRangesChecked.length; k++)
				{
					priceTotalID = priceTotalRangesChecked[k].id.replace("FilterPriceTotalRange_", "");
					priceTotalMinimum = priceTotalID.split("_")[0];
					priceTotalMaximum = priceTotalID.split("_")[1];
					if (priceTotalMaximum == "plus")
					{
						priceTotalMaximum = 100000;
					}

					if (parseInt(allPhones.mobilePhones[i].priceTotalForBindingPeriod) >= parseInt(priceTotalMinimum) && parseInt(allPhones.mobilePhones[i].priceTotalForBindingPeriod) <= parseInt(priceTotalMaximum))
					{
						testPassed_priceTotalRange = true;
						break;
					}
				}
				if (! testPassed_priceTotalRange )
				{
					showPhone = false;
				}
			}

		if (showPhone)
		{
			newPhoneList.addPhone(allPhones.mobilePhones[i]);
		}
	}

	return newPhoneList;
}

function getCheckedBoxes(namePrefix)
{
	var allInputElems = document.getElementsByTagName("input");
	var checkedBoxes = new Array(0);
	for (var k = 0; k < allInputElems.length; k++)
	{
		if ( allInputElems[k].type == "checkbox" && isStringStartingWith(allInputElems[k].id, namePrefix) )
		{
			if (allInputElems[k].checked)
			{
				checkedBoxes[checkedBoxes.length] = allInputElems[k];
			}
		}
	}
	return checkedBoxes;
}

function isStringStartingWith(input, mustStartWith)
{
	if (input.length < mustStartWith.length)
	{
		return false;
	}
	else if (input.substr(0, mustStartWith.length) == mustStartWith)
	{
		return true;
	}
	else
	{
		return false;
	}
}
