(function($) { // wrapper so we play nice with Prototype

$(document).ready(function() {
	init_form_validation('salesforceLead');
	$("ul.accordion").accordion();
	$("#optional_fields").click(function() {
		$(this).attr('clicked', 'true');
	});
});

function init_form_validation(form_id) {
	form = $('#' + form_id);
	if (form.length == 0) {return;}
	form.submit(check_form);
	if ($('#tooltip').length > 0) {
		form.find('input[type=text]:not(._hidden), textarea').tooltip({mode: 'focus', tooltip:'#tooltip'});
	}
	form.find('input[type=submit]').attr('disabled', 'disabled');
	form.find('._alpha').alpha();
	form.find('._numeric').numeric();
	form.find('_email').alphanumeric({allow:".-_@"});
	form.find('_url').alphanumeric({allow:".-_:/"});
	form.find('input[type=text]:not(._hidden)').each(function() {
		img = $('<img />').attr({ src: 'http://dev.willboyce.com/vorari/cross.png', id: this.id + '_status' }).css({ visibility: 'hidden', float: 'right', padding: '10px 10px 0 0' });
		img.insertBefore(this); // .hide(); // hide() after insert() - jQuery/WebKit bug
		//$('<p />').addClass('_error').attr('id', this.id + '_error').insertBefore(img);
	});
	form.find('input[type=text]:not(._hidden)').blur(check_input);
	form.find('span.desc').hide();
}
function check_input(e) {
	el = $(this);
	_check_input(el);
}
function _check_input(el) {
	if (el.hasClass('_req')) {
		if (el.val() == '') {
			return set_error(el, "This field is Required");
		} else {
			if (!el.hasClass('_email') && !el.hasClass('_url')) {set_valid(el);}
		}
	}
	
	if (el.hasClass('_numeric')) {
		if (isNaN(el.val())) {
			return set_error(el, "Invalid Number");
		} else {
			return set_valid(el);
		}
	}
	
	if (el.hasClass('_email')) {
		if (el.val().indexOf('@') > el.val().lastIndexOf('.')) {
			set_error(el, "Invalid Email Address");
		} else {
			$.getJSON('/forms/ajax_verify', { type: 'email', value: el.val() }, function(data) {
				if (!data) {
					set_error(el, "Invalid Email Domain");
				} else {set_valid(el);}
			});
		}
	}
	if (el.hasClass('_url')) {
		$.getJSON('/forms/ajax_verify', { type: 'url', value: el.val() }, function(data) {
			if (!data) {
				set_error(el, "Invalid URL");
			} else {set_valid(el);}
		});
	}
}
function set_error(el, msg) {
	el.css('border-color', 'red').attr('status', 'error');
	$('#'+el.attr('id')+'_status').attr('src', 'http://dev.willboyce.com/vorari/cross.png').css('visibility', 'visible');
	$('#errtip').text(msg);
	$('#errtip').css({left: el.position().left + el.width() + 50, top: el.position().top}).show();
	$('#tooltip').hide();
	$(el.get(0).form).find('input[type=submit]').attr('disabled', 'disabled');
}
function form_is_valid(el) {
	return ($(form).find('._req[status=error]').length == 0);
}
function set_valid(el) {
	el.css('border-color', 'green').attr('status', 'valid');
	$('#'+el.attr('id')+'_status').attr('src', 'http://dev.willboyce.com/vorari/tick.png').css('visibility', 'visible');
	if (form_is_valid(el.form)) {
		el.parents('form').find('input[type=submit]').attr('disabled', '');
		if ($('#' + el.attr('next_section')).length > 0) {
			prompt_panel(el.attr('next_section'));
			$("ul.accordion").accordion("activate", 1);
//			setTimeout(function() {
//				var next = $('#' + el.attr('next_section'));
//				$('#tooltip').css({ top: next.position().top, left: next.position().left + next.width() + 50 });
//				$('#tooltip').text(next.children('span.desc').text()).show();
//			}, 1000);
		}
	}
	$('#errtip').hide();
}
function check_form(e) {
	$('#' + this.id + ' input._req, #' + this.id + ' textarea._req').each(function () {_check_input($(this));});
	if (!form_is_valid(this)) {
		return false;
	}
	if ($('#optional_fields').attr('clicked') != 'true') {
		$('#tooltip').hide();
		$("ul.accordion").accordion("activate", 1);
		return false;
	}
	return true;
}

function prompt_panel(id) {
	el = $('#' + id);
	$("ul.accordion").accordion("activate", 1);
	el.trigger('click');
	setTimeout(function() {
		$('#tooltip').css({ top: el.position().top, left: el.position().left + el.width() + 50 });
		$('#tooltip').text(el.children('span.desc').text()).show();
	}, 1000);
}

})(jQuery);