var Register = new Class({
	initialize: function() {
		var obj = this;
		this.form = $(document.body).getElement('div.layout').getElement('form');
		
		if (!$chk(this.form.getElement('span.success'))) {
			this.pos = this.form.getElements('div.register').length-1;
			$each($$('div.select2'), function(select) {
				select.getElement('select').addEvent('change', function() {
					if (this.get('name')=='country') obj.country(this);
				});
				select.getElement('select').fireEvent('change');
			});
			// Add product
			this.form.getElement('a[target=add]').addEvent('click', function(e) {
				e.stop();
				obj.add();
			});
			this.form.getElement('a[target=remove]').addEvent('click', function(e) {
				e.stop();
				if (obj.form.getElements('div.register').length>1) {
					var parent = this.getParent('div.register');
					parent.setStyle('overflow', 'hidden');
					new Fx.Morph(parent, {duration: 250, onComplete: function() { parent.destroy(); }}).start({'height': 0, 'opacity': 0, 'margin-top': 0, 'padding-top': 0, 'padding-bottom': 0});
				} else obj.resetInputs(this.getParent('div.register'));
			});
		} else {
			// Track success page
			if (!window.location.href.contains('labs.totem')) _gaq.push(['_trackPageview', '/support/product-registration/success/']);
		}
	},
	country: function(select) {
		var obj = this;
		var value = select.get('value');
		if ($chk(select.getParent('div').getParent('div').getNext('div.region'))) {
			var regions = select.getParent('div').getParent('div').getNext('div.region');
			switch(value) {
				case 'CA':
					regions.getElement('div.CA').setStyle('display', 'block').getElement('*[name=region]').erase('disabled');
					regions.getElement('div.US').setStyle('display', 'none').getElement('*[name=region]').set('disabled', true);
					regions.getElement('div.UN').setStyle('display', 'none').getElement('*[name=region]').set('disabled', true);
					break;
				case 'US':
					regions.getElement('div.CA').setStyle('display', 'none').getElement('*[name=region]').set('disabled', true);
					regions.getElement('div.US').setStyle('display', 'block').getElement('*[name=region]').erase('disabled');
					regions.getElement('div.UN').setStyle('display', 'none').getElement('*[name=region]').set('disabled', true);
					break;
				default:
					regions.getElement('div.CA').setStyle('display', 'none').getElement('*[name=region]').set('disabled', true);
					regions.getElement('div.US').setStyle('display', 'none').getElement('*[name=region]').set('disabled', true);
					regions.getElement('div.UN').setStyle('display', 'block').getElement('*[name=region]').erase('disabled');
					break;
			}
		}
	},
	add: function() {
		// Get all the table rows that contain item
		rows = this.form.getElements('div.register');
		// Clone the the first row and insert it after the last row
		clone = rows[0].clone().inject(rows[rows.length-1], 'after');
		// Clone events
		clone.getElement('a[target=remove]').cloneEvents(rows[0].getElement('a[target=remove]'));
		
		clone.getElement('div.select2').getElement('select').addEvent('change', function() {
			this.getParent().getElement('span').set('html', this.getSelected().get('html'));
		});
		
		// Reset positions
		this.setPosition();
		this.resetInputs(clone);
	},
	setPosition: function() {
		$each(this.form.getElements('div.register'), function(row, key) {
			// Input and select
			$each(row.getElements('input, select'), function(input) {
				var newname = input.get('name').substring(0, input.get('name').length-1)+(key+1);
				input.set({'name': newname, 'id': newname});
			});
			// Label
			$each(row.getElements('label'), function(label) {
				var newname = label.get('for').substring(0, label.get('for').length-1)+(key+1);
				label.set('for', newname);
			});
		});
	},
	resetInputs: function(row) {
		$each(row.getElements('input'), function(input) { input.set('value', ''); });
		$each(row.getElements('select'), function(select) {
			select.getElement('option').set('selected', true);
			select.fireEvent('change');
		});
	}
});

window.addEvent('domready', function() { new Register(); });
