$(function() {
    $('#contactForm').ajaxForm({
        beforeSubmit: clearOutput,
        success:      writeOutput
    });
    
    // normal activity indicator (ala gmail)
/*    $('<div id="busy">Loading...</div>')
        .ajaxStart(function() {$(this).show();})
        .ajaxStop(function() {$(this).hide();})
        .appendTo('#main');*/
});

$().ajaxError(function(ev, opts, xhr, msg, ex) {
    //window.console.error(msg + ': ' + ex);
    alert(msg + ': ' + ex);
});

// blockUI activity indicator
//$.extend($.blockUI.defaults.overlayCSS, { backgroundColor: '#00f' });
//$.blockUI.defaults.pageMessage = '<h1><img src="../../block/busy.gif" /> Submitting...</h1>';
//$().ajaxStart($.blockUI).ajaxStop($.unblockUI);

// pre-submit callback
function clearOutput(a, f, o) {
//    o.dataType = 'json'; //, $('select')[0].value;
//    $('#output').html('Submitting form...');
}

// success callback
function writeOutput(data) {
/*    var $out = $('#output');
    $out.html('Form success handler received: <strong>' + typeof data + '</strong>');

    if (typeof data == 'object' && data.nodeType)
        data = elementToString(data.documentElement, true);
    else if (typeof data == 'object')
        data = objToString(data);

    $out.append('<div><pre>'+ data +'</pre></div>');*/
    alert(data);
}

// helper
function objToString(o) {
    var s = '{\n';
    for (var p in o)
        s += '    ' + p + ': ' + o[p] + '\n';
    return s + '}';
}

// helper
function elementToString(n, useRefs) {
    var attr = "", nest = "", a = n.attributes;
    for (var i=0; a && i < a.length; i++)
        attr += ' ' + a[i].nodeName + '="' + a[i].nodeValue + '"';

    if (n.hasChildNodes == false)
        return "<" + n.nodeName + "\/>";

    for (var i=0; i < n.childNodes.length; i++) {
        var c = n.childNodes.item(i);
        if (c.nodeType == 1)       nest += elementToString(c);
        else if (c.nodeType == 2)  attr += " " + c.nodeName + "=\"" + c.nodeValue + "\" ";
        else if (c.nodeType == 3)  nest += c.nodeValue;
    }
    var s = "<" + n.nodeName + attr + ">" + nest + "<\/" + n.nodeName + ">";
    return useRefs ? s.replace(/</g,'&lt;').replace(/>/g,'&gt;') : s;
};

