var _FEEDBACK_PRODUCTS			= new Array({
	iClimb: new Array('1.0.0', '1.0.1'),
	iFindWordz: new Array('1.0.0', '1.0.1'),
	SandScapes: new Array('1.0.0'),
	Visumass: new Array('1.0.0', '1.0.1')
});

var _FEEDBACK_PRODUCTS			= new Array(
	{
		productName: 'BugHunt',
		versions: new Array('1.0.0', '1.0.1', '1.1.0', '1.2.0'),
		unsupportedPlatforms: /^Mac|^Windows/
	},
	{
		productName: 'iClimb',
		versions: new Array('1.0.0', '1.0.1', '1.1.0', '1.1.1', '1.1.2'),
		unsupportedPlatforms: /^Mac|^Windows/
	},
	{
		productName: 'iFindWordz',
		versions: new Array('1.0.0', '1.0.1', '1.1.0'),
		unsupportedPlatforms: /^Mac|^Windows/
	},
	{
		productName: 'SandScapes',
		versions: new Array('1.0.0', '2.0.0', '2.1.0', '2.2.0', '2.6.0'),
		unsupportedPlatforms: /^Mac|^Windows/
	},
	{
		productName: 'Visumass',
		versions: new Array('1.0.0', '1.0.1'),
		unsupportedPlatforms: /^iPod|^iPhone|^Windows/
	});
var _FEEDBACK_PLATFORMS			= new Array('iPod Touch (v2.0 firmware)','iPod Touch (v2.1 firmware)','iPod Touch (v2.2 firmware)','iPhone (v2.0 firmware)','iPhone (v2.1 firmware)','iPhone (v2.2 firmware)','iPhone (v3.x firmware)','Mac OS 10.3 (Panther)','Mac OS 10.4 (Tiger)','Mac OS 10.5 (Leopard)','Windows XP','Windows Vista');
/**
 * Constructor for the feedback form. Initialize all of the drop downs
 * and all of the listeners. 
 *
 */
function feedbackConstr() {

	// disable
	initVersions();
	initPlatforms();

	// initialize products
	initProducts();

	// initialize submission
	initSubmit();
}
/**
 * Add an option to the end of a SELECT object
 *
 * @param		obj			Reference to the select object
 * @param		text		Text to show in the optoin
 */
function addOption(obj, text) {

	// create a new option
	var tOption = new Option(text, text);

	// add the option to the drop down
	obj.options[obj.length] = tOption;
}
/**
 * Remove all options in a SELECT object
 *
 * @param		obj			Reference to the select object
 */
function removeOptions(obj) {
	var len = obj.length;

	// for all of the options, remove
	for (var i=0; i<len; i++) {
		obj.remove(0);
	}
}
/**
 * Initialize the version dropdown 
 *
 */
function initVersions() {

	// reset the drop down
	removeOptions($('form-product-version'));

	// if an offset is supplied, change the dropdown contents
	if (arguments.length > 0) {

		// reset the first selection
		addOption($('form-product-version'), '- Select a Version -');

		// enable the dropdown
		$('form-product-version').disabled = false;

		// for each of the versions, add to the dropdown
		var offset = eval(arguments[0] - 1);
		for (var i=0; i<_FEEDBACK_PRODUCTS[offset].versions.length; i++) {
			addOption($('form-product-version'), _FEEDBACK_PRODUCTS[offset].versions[i]);
		}
	}
	else {

		// reset and disable the dropdown
		addOption($('form-product-version'), '- Select a Product First -');
		$('form-product-version').disabled = true;
	}
}

/**
 * Initialize the platform dropdown 
 *
 */
function initPlatforms() {

	// reset the drop down
	removeOptions($('form-platforms'));

	// if an offset is supplied, change the dropdown contents
	if (arguments.length > 0) {
		
		// reset the first selection
		addOption($('form-platforms'), '- Select a Platform -');
		
		// enable the dropdown
		$('form-platforms').disabled = false;
		var offset = eval(arguments[0] - 1);
		
		// for each of the platforms, add to the dropdown
		for (var i=0; i<_FEEDBACK_PLATFORMS.length; i++) {

			// ensure it's a supported platform
			if (!_FEEDBACK_PRODUCTS[offset].unsupportedPlatforms.test(_FEEDBACK_PLATFORMS[i])) {
				addOption($('form-platforms'), _FEEDBACK_PLATFORMS[i]);
			}
		}
	}
	else {
		
		// reset and disable the dropdown
		addOption($('form-platforms'), '- Select a Product First -');
		$('form-platforms').disabled = true;
	}
}

/**
 * Initialize the products dropdown and add all event listeners
 *
 */
function initProducts() {

	// reset the dropdown
	removeOptions($('form-products'));
	addOption($('form-products'), '- Select a Product -');

	// add all products 
	var tOption;
	for (var i=0; i<_FEEDBACK_PRODUCTS.length; i++) {
		tOption = new Option(_FEEDBACK_PRODUCTS[i].productName, _FEEDBACK_PRODUCTS[i].productName);
		$('form-products').options[$('form-products').length] = tOption;
	}

	// on change update the product versions and platforms
	Element.observe('form-products', 'change', function(event) {

		removeOptions($('form-product-version'));

		if (event.element().selectedIndex > 0) {

			// update product versions
			initVersions(event.element().selectedIndex);

			// update platforms
			initPlatforms(event.element().selectedIndex);
		}
		else {

			// reset versions and platforms
			initVersions();
			initPlatforms();
		}
	});
}
function initSubmit() {
	//$('feedback-container-done').setStyle({ position: 'absolute' });
	Element.observe('feedback-submit', 'click', function(event) {

		// validate
		if ($('form-firstname').value.replace(/\s/g,'').length == 0) {
			showPopup('Whoops!','Please ensure you have properly filled out your first name.',_POPUP_ALERT,$('feedback'), { x: -120, y: 200 }, 3000);
		}
		else if ($('form-lastname').value.replace(/\s/g,'').length == 0) {
			showPopup('Whoops!','Please ensure you have properly filled out your last name.',_POPUP_ALERT,$('feedback'), { x: -120, y: 200 }, 3000);
		}
		else if (!_EMAIL_FILTER.test($('form-email').value)) {
			showPopup('Whoops!','Please ensure you submit a valid email address.',_POPUP_ALERT,$('feedback'), { x: -120, y: 200 }, 3000);
		}
		else if ($('form-products').selectedIndex == 0) {
			showPopup('Whoops!','Please select a product.',_POPUP_ALERT,$('feedback'), { x: -120, y: 200 }, 3000);
		}
		else if ($('form-product-version').selectedIndex == 0) {
			showPopup('Whoops!','Please select the version of '+$('form-products').options[$('form-products').selectedIndex].value+'.',_POPUP_ALERT,$('feedback'), { x: -120, y: 200 }, 3000);
		}
		else if ($('form-platforms').selectedIndex == 0) {
			showPopup('Whoops!','Please select your product\'s platform.',_POPUP_ALERT,$('feedback'), { x: -120, y: 200 }, 3000);
		}
		else if ($('form-inquiry-type').selectedIndex == 0) {
			showPopup('Whoops!','Please select an inquiry type.',_POPUP_ALERT,$('feedback'), { x: -120, y: 200 }, 3000);
		}
		else if ($('form-message').value.replace(/\s/g,'').length == 0) {
			showPopup('Whoops!','Don\'t forget to fill out your message.',_POPUP_ALERT,$('feedback'), { x: -120, y: 200 }, 3000);
		}
		else {


			for (var i=0; i<$$('#feedback input').length; i++) {
				$$('#feedback input')[i].disabled = true;
			}
			for (var i=0; i<$$('#feedback select').length; i++) {
				$$('#feedback select')[i].disabled = true;
			}
			for (var i=0; i<$$('#feedback textarea').length; i++) {
				$$('#feedback textarea')[i].disabled = true;
			}
			e = new Effect.Fade($('feedback'), { duration: 1.0, from: 1.0, to: 0.3, queue: 'end' });

			showPopup('<img src="images/ajax-loader.gif" width="16" height="16" /> Sending..','Thank you for your feedback!',_POPUP_ALERT,$('feedback'), { x: -120, y: 200 }, 0);
			$$('#message div')[0].innerHTML = '';

			// send the request
			var url = '/feedback-request.php';

			new Ajax.Request(url, {
				method: 'post',
				parameters: { 
					firstname: $('form-firstname').value,
					lastname: $('form-lastname').value,
					email: $('form-email').value,
					product: $('form-products').options[$('form-products').selectedIndex].text,
					version: $('form-product-version').options[$('form-product-version').selectedIndex].text,
					platform: $('form-platforms').options[$('form-platforms').selectedIndex].text,
					type: $('form-inquiry-type').options[$('form-inquiry-type').selectedIndex].text,
					message: $('form-message').value
				},
				onSuccess: function(transport) {
					$('message').className = _POPUP_ACCEPT;
					$$('#message h4')[0].innerHTML = 'Feedback Sent!';
					$$('#message p')[0].innerHTML = transport.responseText;
					$$('#message div')[0].innerHTML = 'Close';
					Element.observe($$('#message div')[0], 'click', function(event) {
						$('feedback-submit').value = 'Feedback Sent';
						hidePopup();
					});
				},
				onFailure: function(transport) {
					$$('#message p')[0].innerHTML = 'Whoops! There was an error sending your feedback. Please try again.';
					$$('#message div')[0].innerHTML = 'Retry';
					Element.observe($$('#message div')[0], 'click', function(event) {
						for (var i=0; i<$$('#feedback input').length; i++) {
							$$('#feedback input')[i].disabled = false;
						}
						for (var i=0; i<$$('#feedback select').length; i++) {
							$$('#feedback select')[i].disabled = false;
						}
						for (var i=0; i<$$('#feedback textarea').length; i++) {
							$$('#feedback textarea')[i].disabled = false;
						}
						e = new Effect.Fade($('feedback'), { duration: 1.0, from: 0.3, to: 1.0, queue: 'end' });
					});
				}
			});
		}
	});
}