// constructor
function SoftwareSelector() {
	setTimeout(SoftwareSelector.init, 150);
}

// this class function is called from a timer until the required elements have loaded
SoftwareSelector.init = function() {
	var software_selector_element = $("#software_selector");

	// if elements haven't reloaded, reset timer. Otherwise store elements objects and call main __init
	if(!software_selector_element.length) {
		setTimeout(SoftwareSelector.init, 150);
		return;
	} else {
		SoftwareSelector.instance.software_selector_element = software_selector_element;
	}
	SoftwareSelector.instance.__init();
}

SoftwareSelector.prototype.__init = function() {
	// only show selector if we're not safari
	if(!navigator.userAgent.match(/applewebkit/i)) {
		this.software_selector_element.css('display', 'block');
	} else {
		// apple fallback goes here
		return;
	}

	this.software_selector_url = '/perl-bin/software_selector.pl';
	this.hidden_content_is_toggled = 0;

	// check this boolian to make sure we only do the ajax call once
	this.hidden_content_cached = false;
}

SoftwareSelector.prototype.toggleHiddenContent = function(hidden_content_wrapper_parent) {
	var hidden_content_wrapper_parent_j = $(hidden_content_wrapper_parent)
	if(!hidden_content_wrapper_parent_j.length) { return; }

	var hidden_content_wrapper_j = hidden_content_wrapper_parent_j.children(".hidden_content_container").children(".hidden_content_wrapper");
	if(!hidden_content_wrapper_j.length) { return; }

	this.hidden_content_wrapper = hidden_content_wrapper_j;

	this.hidden_content_is_toggled = 1 ^ this.hidden_content_is_toggled;

	var collapse_button = hidden_content_wrapper_parent_j.find(".collapse_submenu_icon");
	if(this.hidden_content_is_toggled) {
		if(!this.hidden_content_cached) {
			this.loadHiddenContent();
		}
		if(collapse_button.length) {
			collapse_button.attr('src', '/assets/images/css/components/collapse_on.gif')
		}
		this.hidden_content_wrapper.css('display', 'block');
	} else {
		if(collapse_button.length) {
			collapse_button.attr('src', '/assets/images/css/components/collapse_off.gif')
		}
		this.hidden_content_wrapper.css('display', 'none');
	}
}

SoftwareSelector.prototype.loadHiddenContent = function() {
	this.hidden_content_wrapper.empty();
	this.hidden_content_wrapper.append($('<div></div>').addClass('ajax_progress'));
	this.hidden_content_wrapper.load(this.software_selector_url);
	this.hidden_content_cached = true;
}

SoftwareSelector.prototype.UIrelate = function(formElem, selectElem, relatedFormId, relatedFormElemId) {
        var relatedElem = $(relatedFormElemId);
	if(SoftwareSelector.tier_two_data == null || !relatedElem.length) {
		return;
	}

	var relatedData = SoftwareSelector.tier_two_data[selectElem.selectedIndex];

	if(relatedData == null) {
		return;
	}

	relatedElem.empty();

	for ( var i = 0; i < relatedData.length; ++i ) {
		var product = relatedData[i];

		var new_option = $('<option></option>');
		new_option.attr('value', product.id);
		new_option.append(document.createTextNode(product.label));
		relatedElem.append(new_option);
	}
};

SoftwareSelector.prototype.submitForm = function(form_id) {
	var form = $(form_id);
	var action = form.attr('action');
	if(action == null) {
		action = this.software_selector_url;
	}
	var data = $(form_id).children(":input");
	if(data.length <= 0) {
		data = null;
	}
	
	form.parents(".hidden_content_container:first")
		.HiddenContentBox('changeAjaxHiddenContent', action, data);
}

// stores array of product label and ids for UIrelate
SoftwareSelector.tier_two_data = null;

// cache collapse_on.gif
// preload the collapse menu on icon (IE has an inconsistent bug where it does not appear to load the image sometimes)
var t = new Image();
t.src = '/assets/images/css/components/collapse_on.gif';

// store instance inside class as class object
SoftwareSelector.instance = new SoftwareSelector();


