$(function() {

});

var controllerURL = 'controller.php';

function initForm(parentContainer) {
	if (typeof(parentContainer) == "undefined") parentContainer = '';
	if ($(parentContainer + ' form').length <= 0) return false;
	
	var form = $(parentContainer + ' form');
	var formName = form.attr('name').replace('dynamicForm_', '');
	var formFields = form.serializeArray();
	var defaultValues = new Object();
	var defaultFieldTypes = new Object();
	
	if (typeof(_gaq) != 'undefined') _gaq.push(['_trackPageview', '/form/' + formName + '/open']);
	
	for (var i in formFields) {
		var name = formFields[i]['name'];
		var formField = form.find("[name='"+name+"']");
		defaultValues[formFields[i]['name']] = formField.attr('title');
		defaultFieldTypes[formFields[i]['name']] = formField.attr('type');
		
		var formFieldWidth = formField.width() - parseInt(formField.css('padding-left')) - parseInt(formField.css('border-left-width')) - parseInt(formField.css('padding-right')) - parseInt(formField.css('border-right-width'));
		
		if (formField.width() >= form.width() && formField.attr('type') != 'select-one') formField.width(formFieldWidth);
		
		if (formField.val() == '') {
			formField.addClass('form_title').val(defaultValues[formFields[i]['name']]);
			if (defaultFieldTypes[formFields[i]['name']] == 'password') {
				formField.clone().attr('type', 'text').insertBefore(formField);
				formField.remove();
				formField = form.find("[name='"+name+"']");
			}
		}
		
		formField.focus(function() {
			
			if ($(this).parents('fieldset').hasClass('disabled')) {
				$(this).blur();
				return;
			}
		
			var defaultValue = defaultValues[$(this).attr('name')];
			var defaultFieldType = defaultFieldTypes[$(this).attr('name')];
			
			if ($(this).val()==defaultValue) {
			
				$(this).removeClass('form_title').addClass('form_titlefocus');
				
				$(this).keydown(function() {
					$(this).val('').removeClass('form_titlefocus').unbind('keydown');
					
					if (defaultFieldType == 'password') {
						$(this).clone(true).attr('type', 'password').insertBefore($(this)).focus();
						$(this).remove();
					}
				});
				
			}
			
		});
		
		formField.blur(function() {
		
			var defaultValue = defaultValues[$(this).attr('name')];
			var defaultFieldType = defaultFieldTypes[$(this).attr('name')];
			
			$(this).removeClass('form_titlefocus');
			
			if ($(this).val() == '' || $(this).val() == defaultValue) {
				$(this).removeClass('form_filled').addClass('form_title').val(defaultValue);
					
					if (defaultFieldType == 'password') {
						$(this).clone(true).attr('type', 'text').insertBefore($(this));
						$(this).remove();
					}
			}
			
		});
		
		formField.change(function() {
			 $(this).addClass('form_filled');
		});
	}
		
	form.submit(function() {
	
		var formFields = form.serializeArray();
		var formField;
		
		for (var i in formFields) {
			name = formFields[i]['name'];
			value = formFields[i]['value'];
			defaultValue = defaultValues[formFields[i]['name']];
			formField = form.find("[name='"+name+"']");
			
			if (value == defaultValue && formField.attr('type') != 'hidden') {
				formField.val('');
			}
		}
		
	});
	
	initDatePickers();
}

function submitForm(parentContainer, action) {
	if (typeof(parentContainer) == "undefined") parentContainer = '';
	
	var form = $(parentContainer + ' form');
	var formName = form.attr('name').replace('dynamicForm_', '');
	var formContainer = $(parentContainer + ' .form_container');
	var formThankYou = $(parentContainer + ' .form_thankyou');
	var formErrorAlert = $(parentContainer + ' .form_erroralert');
	var action = form.find('input[name=action]').val();
	
	form.find('#field_submit input').attr('disabled', 'disabled');
	
	formErrorAlert.hide();
	form.find('.form_error').removeClass('form_error');
	form.find('label .error').html('').remove();
	
	var formData = form.serialize();
	
	$.ajax({
		type: "POST",
		url: controllerURL,
		data: formData,
		success: function(response) {
			form.find('#field_submit input').removeAttr('disabled');
			if (response) {
				response = eval("(" + response + ")");
				if (response['success']) {
					if (response['redirect']) {
						window.location.href = basehref + response['redirect'];
					} else {
						formContainer.hide();
						formThankYou.show();
					}
					if (typeof(_gaq) != 'undefined') _gaq.push(['_trackPageview', '/form/' + formName + '/thankyou']);
					form.trigger('formSuccess', [response]);
				} else {
					if (typeof(_gaq) != 'undefined') _gaq.push(['_trackPageview', '/form/' + formName + '/error']);
					form.trigger('formError', [response['error']]);
					formErrorAlert.show();
					for (var key in response['error']) {
						form.find('.fielderror_' + key).addClass('form_error');
						form.find('[name=' + key + ']').parent('label').addClass('form_error');
						form.find('[name=' + key + ']').parent().prepend('<span class="error"></span>');
						form.find('[name=' + key + ']').parent().find('.error').html(response['error'][key]).show();
						tabThroughForm(parentContainer);
					}
				}
			}
		}
	});
}

function tabThroughForm(parentContainer) {
	if (typeof(parentContainer) == "undefined") parentContainer = '';
	
	var form = $(parentContainer + ' form');
	var formFields = form.serializeArray();
	
	for (var i in formFields) {
		var name;
		
		name = formFields[i]['name'];
		form.find('[name='+name+']').blur();
	}
}

function initDatePickers() {
	$('input.datepicker').each(function() {
		$(this).datepicker({
			dateFormat: 'm/d/yy',
			altField: $(this).prev(),
			altFormat: 'yy-mm-dd'
		});
	});
}

function getFieldValue(parentContainer, fieldName) {
	if (typeof(parentContainer) == "undefined") parentContainer = '';
	if ($(parentContainer + ' form').length <= 0) return false;
	
	var form = $(parentContainer + ' form');
	
	var value = form.find('input[name=' + fieldName + '], select[name=' + fieldName + ']').val();
	var defaultValue = form.find('input[name=' + fieldName + '], select[name=' + fieldName + ']').attr('title');
	
	if (value == defaultValue) value = '';
	
	return value;
}
