function showFinderOptions(prefix, url)
{
	var values = document.getElementById("optionValues" + prefix);
	var show = false;

	if(values)
	{
		if(values.className.indexOf("optionValuesVisible") == -1)
		{
			show = true;
		}
	}

	hideFinderOptions("Manufacturer");
	hideFinderOptions("FormFactor");
	hideFinderOptions("Feature");
	hideFinderOptions("PriceOption");
	hideFinderOptions("Contract");
	hideFinderOptions("Commitment");

	if(values)
	{
		if(show)
		{
			var button = document.getElementById("optionButton" + prefix);
			button.className += " optionButtonActive";
			values.className += " optionValuesVisible";
		} 
		else 
		{
			var button = document.getElementById("optionButton" + prefix);
			button.className = button.className.replace(" optionButtonActive", "");
			processFinder(prefix, url);
		}
	}

	return false;
}


function processFinder(button, url)
{
	if(button == "reset")
	{
		clearFormOptions("Manufacturer");
		clearFormOptions("FormFactor");
		clearFormOptions("Feature");
		clearFormOptions("PriceOption");
		clearFormOptions("Contract");
		clearFormOptions("Commitment");
	}

	return processFinderOptions(null, url);
}


function clearFinderOptions(prefix, url)
{
	var values = document.getElementsByTagName("INPUT");
	for(var i = 0 ; i < values.length; i++)
	{
		if(values[i].id.indexOf("finder" + prefix + "_") == 0)
		{
			values[i].checked = false;
		}
	}

	return processFinderOptions(prefix, url);
}


function processFinderOptions(prefix, url)
{
	var button = document.getElementById("optionButton" + prefix);
	var valuesContainer = document.getElementById("optionValues" + prefix);

	var values = document.getElementsByTagName("INPUT");

	var selectedValues = new Array();

	selectedValues['Manufacturer'] = getFormOptions("Manufacturer");
	selectedValues['FormFactor'] = getFormOptions("FormFactor");
	selectedValues['Feature'] = getFormOptions("Feature");

	selectedValues['PriceOption'] = getFormOptions("PriceOption");
	selectedValues['Contract'] = getFormOption("Contract");
	selectedValues['Commitment'] = getFormOption("Commitment");

	processFinderButton("Manufacturer", selectedValues['Manufacturer'].length);
	processFinderButton("FormFactor", selectedValues['FormFactor'].length);
	processFinderButton("Feature", selectedValues['Feature'].length);

	processFinderButton("PriceOption", selectedValues['PriceOption'].length);
	processFinderButton("Contract", selectedValues['Contract']);
	processFinderButton("Commitment", selectedValues['Commitment']);

	var ajax = new AJAX(updateProducts, new Array());
	var payload = "";

	var url = getBaseURL() + url;

	for(var i = 0; i < selectedValues['Manufacturer'].length; i++)
	{
		payload += "finderManufacturer[" + selectedValues['Manufacturer'][i] + "]=1&";
	}
	for(var i = 0; i < selectedValues['FormFactor'].length; i++)
	{
		payload += "finderFormFactor[" + selectedValues['FormFactor'][i] + "]=1&";
	}
	for(var i = 0; i < selectedValues['Feature'].length; i++)
	{
		payload += "finderFeature[" + selectedValues['Feature'][i] + "]=1&";
	}
	for(var i = 0; i < selectedValues['PriceOption'].length; i++)
	{
		payload += "finderPriceOption[" + selectedValues['PriceOption'][i] + "]=1&";
	}
	
	payload += "finderContract=" + selectedValues['Contract'] + "&";
	payload += "finderCommitment=" + selectedValues['Commitment'] + "&";
	payload += "ajax=true";

	ajax.setPayload(payload);
	ajax.setMethod("POST");
	ajax.setResponseFormat("XHTML");

	ajax.request(url);

	if(prefix)
	{
		button.className = button.className.replace(" optionButtonActive", "");
		return hideFinderOptions(prefix);
	}
	else
	{
		return false;
	}
}


function updateProducts(args)
{
	var resultsContainer = document.getElementById("finderResults");
	
	if(resultsContainer)
	{
		resultsContainer.innerHTML = args['response'];

		resizeBody("finderResults", 150);
	}
}


function clearFormOptions(prefix)
{
	var values = document.getElementsByTagName("INPUT");

	for(var i = 0 ; i < values.length; i++)
	{
		if((values[i].id.indexOf("finder" + prefix + "_") == 0) && (values[i].className.indexOf("finderCheckbox") > -1))
		{
			if(values[i].checked)
			{
				values[i].checked = false;
			}
		}
	}
}


function getFormOptions(prefix)
{
	var values = document.getElementsByTagName("INPUT");
	var selectedValues = new Array();

	for(var i = 0 ; i < values.length; i++)
	{
		if((values[i].id.indexOf("finder" + prefix + "_") == 0) && (values[i].className.indexOf("finderCheckbox") > -1))
		{
			if(values[i].checked)
			{
				selectedValues[selectedValues.length] = values[i].value;
			}
		}
	}
	return selectedValues;
}


function getFormOption(prefix)
{
	var values = document.getElementsByTagName("INPUT");
	var selectedValue = null;

	for(var i = 0 ; i < values.length; i++)
	{
		if((values[i].id.indexOf("finder" + prefix + "_") == 0) && (values[i].className.indexOf("finderRadio") > -1))
		{
			if(values[i].checked)
			{
				selectedValue = values[i].value;
			}
		}
	}
	return selectedValue;
}


function processFinderButton(prefix, filtered)
{
	var button = document.getElementById("optionButton" + prefix);

	if(button)
	{
		if(filtered)
		{
			if(button.className.indexOf("optionButtonFiltered") == -1)
			{
				button.className += " optionButtonFiltered";
			}
		}
		else
		{
			button.className = button.className.replace("optionButtonFiltered", "");
			button.className = button.className.replace(" optionButtonFiltered", "");
		}
	}
}


function hideFinderOptions(prefix)
{
	var values = document.getElementById("optionValues" + prefix);

	if(values)
	{
		values.className = values.className.replace("optionValuesVisible", "");
		values.className = values.className.replace(" optionValuesVisible", "");
	}

	return false;
}


function changeImage(pageURL, productID, ascending, imagePrefix)
{
	var callbackArgs = new Array();

	var url = getBaseURL() + pageURL + "get-product-image/";

	if(imagePrefix == null)
	{
		callbackArgs['imageWrapper'] = 'imageWrapper';
		callbackArgs['image'] = 'image';
	}
	else
	{
		callbackArgs['imageWrapper'] = imagePrefix + "Wrapper";
		callbackArgs['image'] = imagePrefix;
	}

	var element = document.getElementById(callbackArgs['imageWrapper']);
	if(element)
	{
		var currentID = element.className.replace("image_", "");
	}

	if(currentID)
	{
		url += currentID + "/";
	}

	if(ascending == 1)
	{
		url += "1/";
	}
	else
	{	
		url += "-1/";
	}

	var ajax = new AJAX(showChangeImage, callbackArgs);
	ajax.setResponseFormat("XHTML");
	ajax.request(url);

	return false;
}


function changeLargeImage(pageURL, productID, ascending, imagePrefix)
{
	var callbackArgs = new Array();

	var url = getBaseURL() + pageURL + "get-product-image/";

	if(imagePrefix == null)
	{
		callbackArgs['imageWrapper'] = 'imageWrapper';
		callbackArgs['image'] = 'image';
	}
	else
	{
		callbackArgs['imageWrapper'] = imagePrefix + "Wrapper";
		callbackArgs['image'] = imagePrefix;
	}

	var element = document.getElementById(callbackArgs['imageWrapper']);
	if(element)
	{
		var currentID = element.className.replace("image_", "");
	}

	if(currentID)
	{
		url += currentID + "/";
	}

	if(ascending == 1)
	{
		url += "1/";
	}
	else
	{	
		url += "-1/";
	}

	url += "large/";

	var ajax = new AJAX(showChangeLargeImage, callbackArgs);
	ajax.setResponseFormat("XHTML");
	ajax.request(url);

	return false;
}


function showChangeImage(args)
{
	var image = JSON.parse(args['response'], null);
	if(!image)
	{
		return;
	}

	var element = document.getElementById(args['image']);
	if(element)
	{
		if(image.filePath)
		{
			element.src = getBaseURL() + "f/" + image.filePath;
		}
		else
		{
			element.src = getBaseURL() + "database-files/view-file/?id=" + image.id;
		}
		var wrapper = document.getElementById(args['imageWrapper']);
		if(wrapper)
		{
			wrapper.className = "image_" + image.id;
		}
	}
}


function showChangeLargeImage(args)
{
	var image = JSON.parse(args['response'], null);
	if(!image)
	{
		return;
	}

	var element = document.getElementById(args['image']);
	if(element)
	{
		if(image.filePath)
		{
			element.src = getBaseURL() + "f/" + image.filePath;
		}
		else
		{
			element.src = getBaseURL() + "database-files/view-file/?id=" + image.id;
		}
		var wrapper = document.getElementById(args['imageWrapper']);
		if(wrapper)
		{
			wrapper.className = "image_" + image.id;
		}
	}

	element = document.getElementById('imageCurrent');
	if(element)
	{
		element.innerHTML = image['imageCurrent'];
	}

	element = document.getElementById('imageCount');
	if(element)
	{
		element.innerHTML = image['imageCount'];
	}
}


function updateUnitDetailsFinder(pageURL, productID, unitID, schedule)
{	
	var callbackArgs = new Array();
	callbackArgs['productID'] = productID;

	var ajax = new AJAX(showUnitDetailsFinder, callbackArgs);
	ajax.setResponseFormat("JSON");

	var url = getBaseURL() + pageURL + "get-product-details/finder/" + schedule + "/";
	ajax.request(url);
	return false;
}


function showUnitDetailsFinder(args)
{
	var response = JSON.parse(args['response'], null);
	if(response)
	{
		var details = response.summary;
		var element = document.getElementById("finderResult_" + args['productID']);

		if(element && details)
		{
			element.innerHTML = details;
		}
	}
}


/* Stuff for the compare buttons */
var selectedHandsets = new Array();

function selectHandset(url)
{
	var element = document.getElementById("compare_" + url);
	if(!element)
	{
		return;
	}

	if(element.checked)
	{
		if(selectedHandsets.length < 3)
		{
			if(selectedHandsets.length == 0)
			{
				var id = $('#compareWrapper_' + url).parents('div.finderResult').attr('id');
				displayNakedMessage("detailsMessage", id, "Compare up to 3 Mobiles", "Tick the checkbox of the other mobiles you want to compare and then click on the word 'Compare'.");
			}
			selectedHandsets.push(url);
		}
		else
		{
			element.checked = false;
			displayNakedMessage("detailsMessage", "compareWrapper_" + url, "Comparing Mobiles", "You may only select a maximum of 3 handsets at a time to compare.");
		}
	}
	else
	{
		for(var i = 0; i < selectedHandsets.length; i++)
		{
			if(selectedHandsets[i] == url)
			{
				selectedHandsets.splice(i, 1);
			}
		}
	}
}

function compareHandsets(url, fallbackURL)
{
	for(var i = 0; i < selectedHandsets.length; i++)
	{
		url += selectedHandsets[i] + '/';
	}

	if(selectedHandsets.length < 3)
	{
		var found = false;
		for(var i = 0; i < selectedHandsets.length; i++)
		{
			if(selectedHandsets[i] == fallbackURL)
			{
				found = true;
			}
		}

		if(!found)
		{
			url += fallbackURL + '/';
		}
	}

	window.location = url;
}


function reloadCompareHandsets(url)
{
	for(var i = 0; i < 3; i++)
	{
		var element = document.getElementById('select_' + i);
		if(element)
		{
			var option = element.options[element.selectedIndex];
			url += option.value + '/';
		}
	}

	var rightColumn = document.getElementById('comparePage');

	if(!rightColumn)
	{
		return;
	}

	sjax = new SJAX();
	sjax.setResponseFormat("XHTML");
	rightColumn.innerHTML = sjax.request(url + '?reload=true');

	replacePageTitles();
}
