// include required libraries
var libraries = [
	'/js/switchbox.js',
	'/js/date_select.js'
];
IncludeLibraries(libraries);

// submit form
function SubmitForm(id) {
  $(id).submit();
}

function insertAfter(newElement,targetElement) {
	var parent = targetElement.parentNode;
	if(parent.lastchild == targetElement) {
		parent.appendChild(newElement);
	} else {
		parent.insertBefore(newElement, targetElement.nextSibling);
	}
}

// prevents double submission and gives user visual feedback. 
// set no_replace = true if you still want to see your buttons.
function ProcessForm(form_obj, no_replace) {
	if (!form_obj.id) {
		form_obj.id = 'bideo-default-form';
	}
	buttons = $$('#' + form_obj.id + ' button');
	//console.log($$('#' + form_obj.id + ' button'));
	//alert(buttons.length + " buttons");
	for(var i = 0; i < buttons.length; i++) {
		if(!no_replace) {
			buttons[i].style.display = 'none';
		}
		buttons[i].blur();
		buttons[i].disabled = 'disabled';
		if (i == buttons.length - 1) {
			var loader = document.createElement('span');
			loader.innerHTML = '<img src="/images/loading.gif" alt="" />';
			form_obj.appendChild(loader);
			insertAfter(loader, buttons[i]);
		}
	}
	return true;
}

function TextButtonProcessing(obj) {
	obj.innerHTML = '<span>Processing...</span>';
}

function DisableButton(e) {
	e.disabled = true;
	$(e).update('Processing...');
  $(e).addClassName('processing');
}

function EnableButton(e, value) {
	e.disabled = false;
	$(e).update(value);
  $(e).removeClassName('processing');
}

// set form action and submit
function SetFormAction(form, action, button_obj, dont_submit) {
	if(button_obj){
		if(button_obj.hasClassName('generic')) {
			TextButtonProcessing(button_obj)
		} else {
			// switch out image.
		}
	}
	// prevent back from submitting file upload
	if (action == 'back') { 
		if (e = $('file')) {
		   e.value = '';
		}
	}
	form.elements['form_action'].value = action;
	if(dont_submit == false) {
		// pass
	} else {
		form.submit();
	}
}

// submit form via Ajax call to controller method
function AjaxSubmit(id) {
	// post form
	$(id).request({
		onComplete: function(transport) {
			// get response (expecting JSON)
			var response = transport.responseJSON;
			
			// errors?
			if (response.errors) {
				// clear previous errors
				ClearErrors(id);
				
				// build error message and highlight fields
				var msg    = '';
				var errors = $H(response.errors);
				errors.each(function(pair) {
					msg = msg + '<li>' + pair.value + '</li>';
					if (e = $('f-' + pair.key)) {
						e.addClassName('error');
					}
				});
				
				// display notice
				var notice = '<strong>Please note the following issues:</strong><ul>' + msg + '</ul>';
				SetNotice(escape(notice), 'error');
			} else if (response.notice) {
				// clear errors
				ClearErrors(id);
				
				// reset form
				$(id).reset();
				
				// display notice
				SetNotice(escape(response.notice));
			} else if (response.redirect) {
			  // NAJ added
			  location.href = response.redirect;
			}
		}
	});
}

// clear error styled rows for a given form
function ClearErrors(id) {
	var list = $$('#' + id + ' table tbody > tr[id]');
	list.each(function(row) {
		$(row.id).removeClassName('error');
	});
}

// define behavior to highlight field on focus
var FieldFocus = Behavior.create({
	onfocus:function() {
		this.element.addClassName('field-focus');
	},
	onblur:function() {
		this.element.removeClassName('field-focus');
	}
});

// add behavior to form fields
function AddFieldFocus(input) {
	// init list
	var list = [];
	
	// check input, can be either array of form ids or an element id
	// if neither, default to all forms in document
	if (IsArray(input)) {
		list = input;
	} else if (input != '' && (input = $(input))) {
		list = $A(input.getElementsByTagName('form'));
	} else {
		list = $A(document.getElementsByTagName('form'));
	}
	
	// add behavior
	list.each(function(form) {
		if (form = $(form)) {
			$A(form.getElements()).each(function(e) {
				var types = ['text', 'textarea', 'select-multiple', 'password'];
				if (types.indexOf(e.type) >= 0) {
					FieldFocus.attach(e);
				}
			});
		}
	});
}

// add when loaded
Event.observe(window, 'load', function() {
	AddFieldFocus();
});

