﻿function SetFormBusy(form, busy) {
    try {
        if (busy)
            form.disable();
        else
            form.enable();

        $$('#' + form.id + ' .BusyLoading').first()[busy ? 'show' : 'hide'](); 
    } catch(err) {        
    }   
}

function ProcessForm(form, validate, complete) {
    if (validate === undefined)
        validate = true;

    // Must serialize before we disable the form
    // otherwise the arguments are not present (as the fields were disabled)
    var serializedForm = Form.serialize(form);
    
    // Process validation async if necessary
    if (validate) {
    	ValidateFormAsync(form, function(success) {
    		// Were there any validation errors?
    		if (!success) {
    			// Form has failed validation; re-enable all controls
    			SetFormBusy(form, false);
    		} else {
    			// Form has passed validation, submit form
    			SubmitValidatedForm(form, serializedForm, complete);
    		}
    	});
	} else {
		// Form does not require validation, submit immediately
		SubmitValidatedForm(form, serializedForm, complete);
	}
	
	// Return false to avoid direct page navigation
	return false;
}

function SubmitValidatedForm(form, serializedForm, complete) {
    var myAjax = new Ajax.Request(form.action, {
        parameters: serializedForm,

        onFailure: function(req) {
            ShowErrorMessage("Unknown error: " + req.responseText, 'Failure');            
            SetFormBusy(form, false);
        },

        onSuccess: function(req) {
            SetFormBusy(form, false);
            var data = '';

            try {
                // Retrieve response text		    
                var response = req.responseText.evalJSON();

                data = response.Data;
            } catch (err) {                
                return;
            }

            switch (response.ResponseType) {
                case "SUCCESS":
                    ShowErrorMessage(response.Data, 'Success');
                    break;
                case "WARNING":
                    ShowErrorMessage(response.Data, 'Warning');
                    break;
                case "ERROR":
                    ShowErrorMessage(response.Data, 'Failure');
                    break;
                case "VALIDATIONERROR":
                    ShowValidationErrors(response.Data.evalJSON());
                    break;
                case "REDIRECT":
                    window.location.href = response.Data;
                    break;
                default:
                    ShowErrorMessage("Unexpected Error: " + req.responseText, 'Failure');
                    break;
            }

            if (complete !== undefined) {
                complete(response.ResponseType);
            }
        }
    });

    return false;
}


function FilterDataTable(table, filteredData) {
    // Lets get all of the input elements in the table
    elements = $(table).getElementsBySelector("input");
    for(var i = 0; i < elements.length; ++i) {
        var element = elements[i];
        var tr = element.up("tr");
        var found = false;
        for(var j = 0; j < filteredData.Data.length; ++j) {
            data = filteredData.Data[j];
            if(element.value == data) {
                found = true;
                break;
            }
        }
        element.checked = false;
        if(found)
            tr.show();
        else
            tr.hide();
    }
}