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 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 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 initialiseFinderForm(options)
{

	$('input.toggle').each(function()
	{
		$(this).addClass('hiddenToggle');
		$('#' + $(this).attr('id') + '_label').addClass('toggle');
	});

	$('label.toggle').click(function()
	{
		$(this).toggleClass('active');
		if($('#' + $(this).attr('id').replace('_label', '')).attr('checked') != '')
		{
		$('#' + $(this).attr('id').replace('_label', '')).attr('checked', '');
		}
		else
		{
			$('#' + $(this).attr('id').replace('_label', '')).attr('checked', true);
		}

		if($('#' + $(this).attr('id').replace('_label', '')).hasClass('radio'))
		{
			var self = this;
			$(self).parent().parent().find('li input.toggle').each(function()
			{
				if($(this).parent().attr('rel') == $(self).parent().attr('rel'))
				{
					if($(this).attr('id')  + '_label' != $(self).attr('id'))
					{
						$(this).attr('checked', '');
						$('#' + $(this).attr('id') + '_label').removeClass('active');
					}
				}
			});
		}

		submitFinder(options);
	});


	$('#resetFinder').click(function()
	{
		$('input.toggle').attr('checked', '');
		$('label.toggle').removeClass('active');

		submitFinder(options);
		return false;
	});
}

function submitFinder(options)
{
	var data = {'ajax': true};
	$('input.toggle:checked').each(function()
	{
		if($(this).hasClass('checkbox'))
		{
			data[$(this).attr('name')] = true;
		}
		else
		{
			data[$(this).attr('name')] = $(this).val();
		}
	});
	
	var oldData = $('#resultsCount').html();
	$('#resultsCount').html('Loading your search results');
	$('#resultsCount').addClass('loading');


	if($('#ajaxCounter').length == 0)
	{
		$(document.body).append('<div id="ajaxCounter" style="display: none;">1</div>');
	}
	else
	{
		$('#ajaxCounter').html(parseInt($('#ajaxCounter').html()) + 1);
	}

	$.ajax(
	{
		mode: 'queue',
		url: getBaseURL() + options['url'],
		data: data,
		dataType: 'html',
		type: 'POST',
		success: function(data, responseText)
			{
				$('#ajaxCounter').html(parseInt($('#ajaxCounter').html()) - 1);
				$('#finderResults').html(data);

				if(parseInt($('#ajaxCounter').html()) > 0)
				{
					$('#resultsCount').html('Loading your search results');
					$('#resultsCount').addClass('loading');
				}
				resizeBody("finderResults", 150);
			},
		error: function(responseText)
			{
				$('#ajaxCounter').html(parseInt($('#ajaxCounter').html()) - 1);
				$('#resultsCount').html(oldData);

				if(parseInt($('#ajaxCounter').html()) > 0)
				{
					$('#resultsCount').html('Loading your search results');
					$('#resultsCount').addClass('loading');
				}
				resizeBody("finderResults", 150);
			}
	});
}


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, commitment)
{	
	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 + "/" + commitment + "/";

	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');
}

