// Runs leadcat in one by one question format

var ENTER_KEY = 13;

// One By One object
var obo = {

	pbid: 'oboprogress',
	oboclass: 'obopanel',
	
	fadeInSpeed: '100',
	fadeOutSpeed: '200',
	
	panels: [],
	curr: 0,
	done: false,
	max: 100,
	min: 0,
	disabled: false,
	displayNext: function() {
		if(!this.done && !this.disabled && this.panels[this.curr].isValid()) {
			this.disabled = true;
			if(this.panels[this.curr + 1] != undefined) {
				this.panels[this.curr++].fadeOut(this.fadeOutSpeed, function() {
					obo.panels[obo.curr].fadeIn(obo.fadeInSpeed, function() {
						obo.disabled = false;
						if($(obo.panels[obo.curr].inputs[0]).attr('type') == 'text') {
							obo.panels[obo.curr].inputs[0].focus();
						}
					});
				});
				$('#' + this.pbid).progressbar('option','value',Math.floor((this.curr / this.panels.length) * (this.max - this.min)) + this.min); 
			} else {
				this.done = true;
				$('#' + this.pbid).progressbar('option','value',this.max);
				$('form').submit();
			}
		}
	},
	init: function(min, max) {
		this.min = min;
		this.max = max;
		// initialize progress bar
		$('#' + this.pbid).progressbar({
			value: this.min
		});
		
		// store questions in collection
		$('.' + this.oboclass).each(function(index) {
			var panel = $(this);
			panel.isValid = function() {
				for(var i = 0; i < this.inputs.length; i++) {
					if(this.inputs[i].disabled == true) continue;
					if(this.inputs[i].isValid == undefined || this.inputs[i].isValid == false || $(this.inputs[i]).attr('type') == 'submit') {
						return false;
					}
				}
				return true;
			}
			panel.inputs = panel.find('input, select, textarea');
			panel.find('select').change(function() {
				if($(this).valid()) {
					this.isValid = true;
				} else {
					this.isValid = false;
				}
				obo.displayNext();
			});
			panel.find('input[type=text]').blur(function() {
				$(this).trigger('keyup');
			});
			panel.find('input[type=text]').keyup(function(e) {
				var that = this;
				if(e.which == undefined || e.which == ENTER_KEY) {
					var classes = $(this).attr('class').split(' ');
					for(var i in classes) {
						if($.validator.classRuleSettings[classes[i]] != undefined && $.validator.classRuleSettings[classes[i]].remote != undefined) {
							var data = {};
							data[classes[i]] = $(this).val();
							$.ajax({
								url: $.validator.classRuleSettings[classes[i]].remote,
								data: data,
								success: function(response) {
									if(response == 'true') {
										that.isValid = true;
									} else {
										that.isValid = false;
									}
									obo.displayNext();
								}
							});
							return;
						}
					}
					if($(this).valid()) {
						this.isValid = true;
					} else {
						this.isValid = false;
					}
					obo.displayNext();
				}
			});
			panel.find('input[type=radio]').click(function() {
				if($(this).valid()) {
					$('input[name=' + $(this).attr('name') + ']').each(function() {
						this.isValid = true;
					});
				} else {
					this.isValid = false;
				}
				obo.displayNext();
			});

			panel.hide();
			
			// add new panel to collection
			obo.panels[index] = panel;
			
		});
		
		// display first question in collection
		this.panels[this.curr].show();
	}
}

