/*
	PsgSelector - class to manage product selector interface for PSG products
*/
var PsgSelector = function(less_label, more_label, questions_data) {
	this.show_less_label = less_label;
	this.show_more_label = more_label;
	this.questions       = questions_data;
};

PsgSelector.toggleElements = function(e) {
		var instance = e.data.instance;

		var psg_selector_hidden_fields = $('.psg_selector_hidden_field');

		for(var i = 0; i < psg_selector_hidden_fields.length; i++) {
			var psg_selector_hidden_field = $(psg_selector_hidden_fields[i]);
			psg_selector_hidden_field.toggle();
		}

		var moreElem = $('#psg_selector_more_opts');
		var moreElem_name = moreElem.attr('class');

		switch (moreElem_name)
		{
			case 'psg_selector_less' :
				moreElem.get(0).innerHTML = instance.show_more_label;
				moreElem.attr('class', 'psg_selector_more');
				break;
			case 'psg_selector_more' :
				moreElem.get(0).innerHTML = instance.show_less_label;
				moreElem.attr('class', 'psg_selector_less');
				break;
		}
};

PsgSelector.setElements = function(e) {
		var instance = e.data.instance;
		var reset = e.data.reset;
		var target = e.target;

		if(reset == null) { reset = false; }

		var filter = instance.getFilter(target);

		for ( var i = 0; i < instance.questions.length; ++i )
		{
			var question = instance.questions[i];

			switch (question.type)
			{
				case 'radio' :
					instance.setRadio(question, filter, reset);
					break;
				case 'select' :
					instance.setSelect(question, filter, reset);
					break;
			}
		}
};

PsgSelector.resetElements = function(e) {
	e.data.reset = true;
	return PsgSelector.setElements(e);
};

PsgSelector.prototype = {
	getFilter: function(elem) {

		// if we do not have an element to use looking for the filter,
		// look in the defaults for a filter type
		if ( elem == null || elem.id == null )
		{
			for ( var i = 0; i < this.questions.length; ++i )
			{
				var elem = this.questions[i];

				if ( elem.default_idx != null )
				{
					return elem.choices[elem.default_idx].type;
				}
			}
		}

		var elemId = elem.id.replace(/_\d+$/,''); // remove trailing index

		for ( var i = 0; i < this.questions.length; ++i )
		{
			var question = this.questions[i];

			if ( question.id == elemId )
			{
				var selectedIdx = parseInt(elem.value);

				return selectedIdx >= 0 ? question.choices[selectedIdx].type : null;
			}
		}

		return null;
	},
	setRadio: function(elem, filter, reset) {

		var default_index = elem.default_idx;

		for ( var i = 0; i < elem.choices.length; ++i )
		{
			var choice   = elem.choices[i];
			var formElem = $('#'+elem.id+'_'+i).get(0);
			if ( choice.type != null && filter != null )
			{
				if ( reset )
				{
					formElem.disabled = false;
					formElem.checked  = false;

				}
				else if ( choice.type == filter || i == default_index )
				{
					formElem.disabled = false;
					formElem.checked  = true;

					elem.default_idx = null;
				}
				else
				{
					formElem.disabled = true;
				}
			}
			else if ( reset )
			{
				formElem.checked  = false;
				formElem.disabled = false;
			}
			else
			{
				formElem.disabled = false;
			}
		}
	},
	setSelect: function(elem, filter, reset) {
		var formElem = $("#" + elem.id).get(0);

		// for some reason, IE is not cooperating with letting us clear the
		// select element choices using options.length = 0
		// so, we keep track of how many elements we create and truncate the
		// list in the end...a hack, but it works
		var displayedChoices = 0;
		var currChoice       = formElem.value;
		currChoice = parseInt(currChoice);

		for ( var i = 0; i < elem.choices.length; ++i )
		{
			var choice = elem.choices[i];

			if ( filter == null || filter == choice.type )
			{
				var opt = new Option(choice.label, i, false, false);

				if ( !reset && (i == elem.default_idx || i == currChoice) )
				{
					opt.selected = true;

					elem.default_idx = null; // we only want to default once
				}

				formElem.options[displayedChoices] = opt;
				displayedChoices++;
			}
		}

		formElem.options.length = displayedChoices;
	}
};

//
// This won't allow the form to submit unless at least one of the 
// options is checked.
//
function PsgSelectorSubmit()
{
	// Look for color selection
	var foundColorSelection = 0;
	var elements = document.getElementsByName("psg_selector_output");
	for (var i = 0; i < elements.length; i++)
		if (elements[i].checked == true)
			foundColorSelection = 1;

	// Look for paper selection
	var foundPaperSelection = 0;
	var elements = document.getElementsByName("psg_selector_type");
	for (var i = 0; i < elements.length; i++)
		if (elements[i].checked == true)
			foundPaperSelection = 1;

        if (! foundColorSelection && ! foundPaperSelection)
		return false;

	return true;
}

