function remove_highlight(form_id) {
    var css_selector = '#' + form_id;
    css_selector = css_selector + ' input[type=text], ' + css_selector + ' textarea, ' + css_selector + ' select';
    // remove highlight
    $$(css_selector).each(function (next_field) {
        if ($(next_field.id) != null && $(next_field.id).hasClassName('err'))
            $(next_field.id).removeClassName('err');
    });
    // remove class from message area
    if ($('div_msgs').hasClassName('err')) $('div_msgs').removeClassName('err');
    if ($('div_msgs').hasClassName('msg')) $('div_msgs').removeClassName('msg');
}
function add_highlight(response, wrap_id) {
    if (response.result == 'true') {
        $('div_msgs').addClassName('msg');
        $('div_msgs').update(response.msgs);
        if ($(wrap_id) != null) $(wrap_id).hide();
    } else {
        $('div_msgs').addClassName('err');
        response.inv_fields.each(function (field) {
            var field_id = field;
            if ($(field_id) != null) {
                $(field_id).addClassName('err');
            }
        });
        $('div_msgs').update(response.errs);
    }
}
function execute_action(url, form_id, wrap_id) {
    new Ajax.Request(url, {
        method: 'post',
        parameters: $(form_id).serialize(true),
        onSuccess: function (transport) {
            //alert(transport.responseText);
            remove_highlight(form_id);
            var response = transport.responseText.evalJSON() || func_name + 'failed! Please contact customer service.';
            add_highlight(response, wrap_id);
        },
        onFailure: function() {alert(func_name + 'failed! Please contact customer service.');}
    });
}
/**
 * @params action_callback - function to call onSuccess
 */
function validate_form(url, form_id, action_callback) {
    new Ajax.Request(url, {
        method: 'post',
        parameters: $(form_id).serialize(true),
        onSuccess: function (transport) {
            //alert(transport.responseText);
            remove_highlight(form_id);
            var response = transport.responseText.evalJSON() || (response.result = false);
            add_highlight(response);
            if (action_callback !== undefined && response.result == 'true') action_callback();
        }
    });
}
